Skip to content

refactor(api): migrate HITL logic back to Dify#38225

Draft
QuantumGhost wants to merge 60 commits into
langgenius:mainfrom
QuantumGhost:codex/hitl-graphon-185
Draft

refactor(api): migrate HITL logic back to Dify#38225
QuantumGhost wants to merge 60 commits into
langgenius:mainfrom
QuantumGhost:codex/hitl-graphon-185

Conversation

@QuantumGhost

@QuantumGhost QuantumGhost commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

AI disclosure: This PR was AI-assisted with Codex using GPT-5.4.
I have reviewed the final diff, and I am responsible for the content.

Summary

Closes #38224

This PR migrates Human Input / HITL ownership back to Dify on top of graphon#185.

The core goal is to keep graphon responsible only for the minimal HITL boundary and control flow, while Dify owns:

  • form schema and compatibility
  • rendering and default resolution
  • delivery and recipient behavior
  • persistence and outward API payloads
  • submission validation and rehydration

Background

Before this change, HITL logic was split awkwardly across Dify and graphon. That created a recurring problem: a single HITL feature often needed synchronized changes in both repositories.

graphon#185 made the boundary much smaller by reducing HITL to:

  • a callback-driven decision flow
  • a minimal pause contract carrying graphon-facing identity

That makes it possible to move the rest of the Human Input semantics back into Dify.

SessionBinding

A central part of this migration is SessionBinding.

Dify still exposes form_id outward, while graphon internally speaks session_id at the HITL boundary. This PR introduces an explicit translation layer so the two identifier spaces are not mixed directly throughout the codebase.

Phase 1 keeps the mapping as identity, but only inside SessionBinding:

  • issue_session_id_for_form(form_id=...)
  • resolve_form_id_from_session_id(session_id=...)

This keeps the current behavior stable while making a future non-identity mapping possible.

Main Changes

  • Added a Dify-owned core.workflow.human_input package for Human Input entities, enums, rendering helpers, validation, and compatibility handling.
  • Added SessionBinding and migrated read/write paths to use it instead of relying on raw equality between form_id and session_id.
  • Upgraded graphon to commit 21af61373defc45e7024acb3de19dd836f5f2a00.
  • Replaced old Human Input runtime wiring with Dify callback-based HITL integration.
  • Migrated pause persistence, hydration, workflow/app response generation, advanced-chat side effects, and ask-human flows to the new boundary.
  • Preserved compatibility for legacy persisted form_definition payloads such as actions / resolved_default_values.
  • Updated unit and integration-adjacent tests to the new minimal HITL contract.

Validation

  • make lint
  • make type-check
  • Unit tests: 15841 passed, 4 skipped
  • api/tests/test_containers_integration_tests: blocked locally because testcontainers could not connect to the Docker Unix socket

Screenshots

N/A. Backend / contract migration only.

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 added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint && make type-check (backend) and cd web && pnpm exec vp staged (frontend) to appease the lint gods

Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
Assisted-by: Codex:GPT-5.4
@QuantumGhost QuantumGhost requested a review from a team June 30, 2026 10:52
@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. refactor labels Jun 30, 2026
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-06-30 15:25:21.959841593 +0000
+++ /tmp/pyrefly_pr.txt	2026-06-30 15:25:10.161698346 +0000
@@ -1,3 +1,19 @@
+ERROR Class member `PluginModelRuntime.invoke_llm` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:277:9
+ERROR Class member `PluginModelRuntime.invoke_text_embedding` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:484:9
+ERROR Class member `PluginModelRuntime.invoke_multimodal_embedding` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:506:9
+ERROR Class member `PluginModelRuntime.invoke_rerank` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:548:9
+ERROR Class member `PluginModelRuntime.invoke_multimodal_rerank` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:574:9
+ERROR Class member `PluginModelRuntime.invoke_tts` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:600:9
+ERROR Class member `PluginModelRuntime.invoke_speech_to_text` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:642:9
+ERROR Class member `PluginModelRuntime.invoke_moderation` overrides parent class `ModelRuntime` in an inconsistent manner [bad-override]
+   --> core/plugin/impl/model_runtime.py:662:9
 ERROR Argument `SimpleNamespace` is not assignable to parameter `dataset` with type `Dataset` in function `dify_vdb_alibabacloud_mysql.alibabacloud_mysql_vector.AlibabaCloudMySQLVectorFactory.init_vector` [bad-argument-type]
   --> providers/vdb/vdb-alibabacloud-mysql/tests/unit_tests/test_alibabacloud_mysql_factory.py:42:38
 ERROR Argument `SimpleNamespace` is not assignable to parameter `dataset` with type `Dataset` in function `dify_vdb_alibabacloud_mysql.alibabacloud_mysql_vector.AlibabaCloudMySQLVectorFactory.init_vector` [bad-argument-type]
@@ -724,10 +740,14 @@
    --> tests/test_containers_integration_tests/core/rag/retrieval/test_dataset_retrieval_integration.py:593:23
 ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
    --> tests/test_containers_integration_tests/core/rag/retrieval/test_dataset_retrieval_integration.py:603:23
+ERROR Argument `core.workflow.human_input.entities.HumanInputNodeData` is not assignable to parameter `data` with type `graphon.nodes.human_input.entities.HumanInputNodeData` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:124:14
+ERROR Argument `DifyHumanInputCallback` is not assignable to parameter `hitl_callback` with type `(HITLContext) -> Completed | Expired | PauseRequested` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:127:23
 ERROR Argument `Connection | Engine` is not assignable to parameter `session_factory` with type `Engine | sessionmaker[Unknown]` in function `core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository.__init__` [bad-argument-type]
-   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:265:29
+   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:267:29
 ERROR Argument `Connection | Engine` is not assignable to parameter `session_factory` with type `Engine | sessionmaker[Unknown]` in function `core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository.__init__` [bad-argument-type]
-   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:271:29
+   --> tests/test_containers_integration_tests/core/workflow/test_human_input_resume_node_execution.py:273:29
 ERROR Argument `Literal['owner']` is not assignable to parameter `role` with type `SQLCoreOperations[TenantAccountRole] | TenantAccountRole` in function `models.account.TenantAccountJoin.__init__` [bad-argument-type]
   --> tests/test_containers_integration_tests/helpers/execution_extra_content.py:48:14
 ERROR Returned type `int | str` is not assignable to declared return type `str` [bad-return]
@@ -745,9 +765,9 @@
 ERROR Cannot instantiate `DifyAPISQLAlchemyWorkflowNodeExecutionRepository` because the following members are abstract: `save`, `save_execution_data`, `get_by_workflow_execution` [bad-instantiation]
    --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_api_workflow_node_execution_repository.py:122:70
 ERROR Class member `_TestWorkflowRunRepository.save` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_api_workflow_run_repository.py:44:9
+  --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_api_workflow_run_repository.py:50:9
 ERROR Generator function should return `Generator` [bad-return]
-   --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_api_workflow_run_repository.py:138:56
+   --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_api_workflow_run_repository.py:144:56
 ERROR Argument `str | None` is not assignable to parameter `tenant_id` with type `str` in function `_create_node_execution_model` [bad-argument-type]
    --> tests/test_containers_integration_tests/repositories/test_sqlalchemy_workflow_node_execution_repository.py:181:23
 ERROR Argument `str | None` is not assignable to parameter `tenant_id` with type `str` in function `_create_node_execution_model` [bad-argument-type]
@@ -1159,7 +1179,7 @@
 ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `SQLCoreOperations[TenantStatus] | TenantStatus` in function `models.account.Tenant.__init__` [bad-argument-type]
   --> tests/test_containers_integration_tests/services/test_file_service.py:78:20
 ERROR Argument `Literal['owner']` is not assignable to parameter `role` with type `SQLCoreOperations[TenantAccountRole] | TenantAccountRole` in function `models.account.TenantAccountJoin.__init__` [bad-argument-type]
-  --> tests/test_containers_integration_tests/services/test_human_input_delivery_test.py:45:18
+  --> tests/test_containers_integration_tests/services/test_human_input_delivery_test.py:44:18
 ERROR Unexpected keyword argument `whole_workspace` in function `core.workflow.human_input_adapter.EmailRecipients.__init__` [unexpected-keyword]
    --> tests/test_containers_integration_tests/services/test_human_input_delivery_test_service.py:241:44
 ERROR Argument `Literal['active']` is not assignable to parameter `status` with type `AccountStatus | SQLCoreOperations[AccountStatus]` in function `models.account.Account.__init__` [bad-argument-type]
@@ -2349,27 +2369,27 @@
 ERROR Argument `SimpleNamespace` is not assignable to parameter `application_generate_entity` with type `AdvancedChatAppGenerateEntity | WorkflowAppGenerateEntity` in function `core.app.apps.common.workflow_response_converter.WorkflowResponseConverter.__init__` [bad-argument-type]
   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:99:37
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow` with type `WorkflowSnapshot` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:434:22
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:449:22
 ERROR Argument `SimpleNamespace` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:435:27
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:450:27
 ERROR Argument `SimpleNamespace` is not assignable to parameter `conversation` with type `ConversationSnapshot` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:436:26
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:451:26
 ERROR Argument `SimpleNamespace` is not assignable to parameter `message` with type `MessageSnapshot` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:437:21
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:452:21
 ERROR Argument `(**kwargs: Unknown) -> None` is not assignable to parameter `draft_var_saver_factory` with type `DraftVariableSaverFactory` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:447:37
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:462:37
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow` with type `Workflow` in function `core.app.apps.workflow.generate_task_pipeline.WorkflowAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:527:22
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:542:22
 ERROR Argument `SimpleNamespace` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow.generate_task_pipeline.WorkflowAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:528:27
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:543:27
 ERROR Argument `SimpleNamespace` is not assignable to parameter `user` with type `Account | EndUser` in function `core.app.apps.workflow.generate_task_pipeline.WorkflowAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:529:18
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:544:18
 ERROR Argument `(**kwargs: Unknown) -> None` is not assignable to parameter `draft_var_saver_factory` with type `DraftVariableSaverFactory` in function `core.app.apps.workflow.generate_task_pipeline.WorkflowAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:531:37
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:546:37
 ERROR Argument `SimpleNamespace` is not assignable to parameter `graph_runtime_state` with type `GraphRuntimeState` in function `core.app.apps.common.workflow_response_converter.WorkflowResponseConverter.workflow_pause_to_stream_response` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:627:33
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:637:33
 ERROR Argument `() -> TestHitlServiceApi.test_snapshot_events_include_pause_payload_contract._SessionContext` is not assignable to parameter `session_maker` with type `sessionmaker[Session] | None` in function `services.workflow_event_snapshot_service._build_snapshot_events` [bad-argument-type]
-   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:702:27
+   --> tests/unit_tests/controllers/service_api/app/test_hitl_service_api.py:714:27
 ERROR Argument value `Literal[0]` violates Pydantic `ge` constraint `Literal[1]` for field `limit` [bad-argument-type]
   --> tests/unit_tests/controllers/service_api/app/test_message.py:90:63
 ERROR Argument value `Literal[101]` violates Pydantic `le` constraint `Literal[100]` for field `limit` [bad-argument-type]
@@ -2453,13 +2473,13 @@
 ERROR Cannot index into `Response` [bad-index]
    --> tests/unit_tests/controllers/trigger/test_webhook.py:101:16
 ERROR Argument `SimpleNamespace` is not assignable to parameter `app_model` with type `App` in function `controllers.web.site.serialize_app_site_payload` [bad-argument-type]
-   --> tests/unit_tests/controllers/web/test_human_input_form.py:217:54
+   --> tests/unit_tests/controllers/web/test_human_input_form.py:216:54
 ERROR Argument `SimpleNamespace` is not assignable to parameter `site` with type `Site` in function `controllers.web.site.serialize_app_site_payload` [bad-argument-type]
-   --> tests/unit_tests/controllers/web/test_human_input_form.py:217:65
+   --> tests/unit_tests/controllers/web/test_human_input_form.py:216:65
 ERROR Argument `SimpleNamespace` is not assignable to parameter `app_model` with type `App` in function `controllers.web.site.serialize_app_site_payload` [bad-argument-type]
-   --> tests/unit_tests/controllers/web/test_human_input_form.py:251:54
+   --> tests/unit_tests/controllers/web/test_human_input_form.py:250:54
 ERROR Argument `SimpleNamespace` is not assignable to parameter `site` with type `Site` in function `controllers.web.site.serialize_app_site_payload` [bad-argument-type]
-   --> tests/unit_tests/controllers/web/test_human_input_form.py:251:65
+   --> tests/unit_tests/controllers/web/test_human_input_form.py:250:65
 ERROR Object of class `ModuleType` has no attribute `web_ns` [missing-attribute]
   --> tests/unit_tests/controllers/web/test_message_list.py:41:9
 ERROR Object of class `ModuleType` has no attribute `WebApiResource` [missing-attribute]
@@ -3096,113 +3116,115 @@
     --> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1366:33
 ERROR Object of class `Generator` has no attribute `ok`
 ERROR Cannot index into `str` [bad-index]
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_response_converter.py:128:16
+ERROR Cannot index into `str` [bad-index]
    --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_response_converter.py:129:16
 ERROR Cannot index into `str` [bad-index]
    --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_response_converter.py:130:16
-ERROR Cannot index into `str` [bad-index]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_response_converter.py:131:16
 ERROR `SimpleNamespace` is not assignable to attribute `_application_generate_entity` with type `AdvancedChatAppGenerateEntity` [bad-assignment]
    --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:109:45
+ERROR `SimpleNamespace` is not assignable to attribute `_application_generate_entity` with type `AdvancedChatAppGenerateEntity` [bad-assignment]
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:155:45
 ERROR Argument `SimpleNamespace` is not assignable to parameter `application_generate_entity` with type `AdvancedChatAppGenerateEntity` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:176:37
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:229:37
 ERROR Argument `SimpleNamespace` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:178:23
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:231:23
 ERROR Argument `SimpleNamespace` is not assignable to parameter `draft_var_saver_factory` with type `DraftVariableSaverFactory` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:184:33
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:237:33
 ERROR `SimpleNamespace` is not assignable to attribute `_application_generate_entity` with type `AdvancedChatAppGenerateEntity` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:218:45
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:271:45
 ERROR `SimpleNamespace` is not assignable to attribute `_application_generate_entity` with type `AdvancedChatAppGenerateEntity` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:240:45
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline.py:293:45
 ERROR Argument `SimpleNamespace` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:101:23
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:100:23
 ERROR Argument `(**kwargs: Unknown) -> None` is not assignable to parameter `draft_var_saver_factory` with type `DraftVariableSaverFactory` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:107:33
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:106:33
 ERROR `SimpleNamespace` is not assignable to attribute `_message_cycle_manager` with type `MessageCycleManager` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:188:43
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:187:43
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueTextChunkEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_text_chunk_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:196:60
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:195:60
 ERROR Argument `SimpleNamespace` is not assignable to parameter `publisher` with type `AppGeneratorTTSPublisher | None` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._listen_audio_msg` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:241:57
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:240:57
 ERROR `(err: Unknown) -> Unknown` is not assignable to attribute `error_to_stream_response` with type `(self: BasedGenerateTaskPipeline[Unknown], e: Exception) -> ErrorStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:256:65
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:255:65
 ERROR `() -> _GeneratorContextManager[SimpleNamespace]` is not assignable to attribute `_database_session` with type `(self: AdvancedChatAppGenerateTaskPipeline) -> _GeneratorContextManager[Session]` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:262:38
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:261:38
 ERROR `(**kwargs: Unknown) -> Literal['started']` is not assignable to attribute `workflow_start_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_run_id: str, workflow_id: str, reason: WorkflowStartReason) -> WorkflowStartStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:274:83
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:273:83
 ERROR `TestAdvancedChatGenerateTaskPipeline.test_handle_output_moderation_chunk_publishes_stop._Moderation` is not assignable to attribute `output_moderation_handler` with type `OutputModeration | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:328:66
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:327:66
 ERROR `SimpleNamespace` is not assignable to attribute `queue_manager` with type `AppQueueManager` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:329:54
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:328:54
 ERROR `(outputs: Unknown) -> list[dict[str, str]]` is not assignable to attribute `fetch_files_from_node_outputs` with type `(cls: type[WorkflowResponseConverter], outputs_dict: Mapping[str, Any] | None) -> Sequence[Mapping[str, Any]]` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:342:79
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:341:79
 ERROR `(**kwargs: Unknown) -> Literal['done']` is not assignable to attribute `workflow_node_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueNodeExceptionEvent | QueueNodeFailedEvent | QueueNodeSucceededEvent, task_id: str) -> NodeFinishStreamResponse | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:345:89
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:344:89
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueNodeSucceededEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_node_succeeded_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:355:64
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:354:64
 ERROR `(outputs: Unknown) -> list[@_]` is not assignable to attribute `fetch_files_from_node_outputs` with type `(cls: type[WorkflowResponseConverter], outputs_dict: Mapping[str, Any] | None) -> Sequence[Mapping[str, Any]]` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:362:79
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:361:79
 ERROR `(**kwargs: Unknown) -> Literal['done']` is not assignable to attribute `workflow_node_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueNodeExceptionEvent | QueueNodeFailedEvent | QueueNodeSucceededEvent, task_id: str) -> NodeFinishStreamResponse | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:363:89
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:362:89
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueNodeSucceededEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_node_succeeded_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:373:52
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:372:52
 ERROR `(outputs: Unknown) -> list[@_]` is not assignable to attribute `fetch_files_from_node_outputs` with type `(cls: type[WorkflowResponseConverter], outputs_dict: Mapping[str, Any] | None) -> Sequence[Mapping[str, Any]]` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:379:79
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:378:79
 ERROR `(**kwargs: Unknown) -> Literal['done']` is not assignable to attribute `workflow_node_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueNodeExceptionEvent | QueueNodeFailedEvent | QueueNodeSucceededEvent, task_id: str) -> NodeFinishStreamResponse | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:380:89
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:379:89
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueNodeSucceededEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_node_succeeded_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:392:52
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:391:52
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueNodeSucceededEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_node_succeeded_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:393:52
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:392:52
 ERROR `(**kwargs: Unknown) -> Literal['iter_start']` is not assignable to attribute `workflow_iteration_start_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueIterationStartEvent) -> IterationNodeStartStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:400:93
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:399:93
 ERROR `(**kwargs: Unknown) -> Literal['iter_next']` is not assignable to attribute `workflow_iteration_next_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueIterationNextEvent) -> IterationNodeNextStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:403:92
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:402:92
 ERROR `(**kwargs: Unknown) -> Literal['iter_done']` is not assignable to attribute `workflow_iteration_completed_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueIterationCompletedEvent) -> IterationNodeCompletedStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:404:97
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:403:97
 ERROR `(**kwargs: Unknown) -> Literal['loop_start']` is not assignable to attribute `workflow_loop_start_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueLoopStartEvent) -> LoopNodeStartStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:407:88
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:406:88
 ERROR `(**kwargs: Unknown) -> Literal['loop_next']` is not assignable to attribute `workflow_loop_next_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueLoopNextEvent) -> LoopNodeNextStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:408:87
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:407:87
 ERROR `(**kwargs: Unknown) -> Literal['loop_done']` is not assignable to attribute `workflow_loop_completed_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_execution_id: str, event: QueueLoopCompletedEvent) -> LoopNodeCompletedStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:409:92
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:408:92
 ERROR `(**kwargs: Unknown) -> Literal['finish']` is not assignable to attribute `workflow_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, task_id: str, workflow_id: str, status: WorkflowExecutionStatus, graph_runtime_state: GraphRuntimeState, error: str | None = None, exceptions_count: int = 0) -> WorkflowFinishStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:476:84
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:475:84
 ERROR `(**kwargs: Unknown) -> list[str]` is not assignable to attribute `workflow_pause_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueWorkflowPausedEvent, task_id: str, graph_runtime_state: GraphRuntimeState) -> list[StreamResponse]` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:477:83
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:476:83
 ERROR `(err: Unknown) -> Unknown` is not assignable to attribute `error_to_stream_response` with type `(self: BasedGenerateTaskPipeline[Unknown], e: Exception) -> ErrorStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:482:65
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:481:65
 ERROR `(**kwargs: Unknown) -> SimpleNamespace` is not assignable to attribute `_get_message` with type `(self: AdvancedChatAppGenerateTaskPipeline, *, session: Session) -> Message` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:483:33
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:482:33
 ERROR `(**kwargs: Unknown) -> Literal['node_finish']` is not assignable to attribute `workflow_node_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueNodeExceptionEvent | QueueNodeFailedEvent | QueueNodeSucceededEvent, task_id: str) -> NodeFinishStreamResponse | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:514:89
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:513:89
 ERROR `SimpleNamespace` is not assignable to attribute `_message_cycle_manager` with type `MessageCycleManager` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:549:43
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:548:43
 ERROR Argument `SimpleNamespace` is not assignable to parameter `event` with type `QueueTextChunkEvent` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_text_chunk_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:555:47
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:554:47
 ERROR Argument `TestAdvancedChatGenerateTaskPipeline.test_handle_text_chunk_event_tracks_streaming_metrics._Publisher` is not assignable to parameter `tts_publisher` with type `AppGeneratorTTSPublisher | None` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_text_chunk_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:555:68
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:554:68
 ERROR Argument `SimpleNamespace` is not assignable to parameter `queue_message` with type `MessageQueueMessage | WorkflowQueueMessage | None` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._handle_text_chunk_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:555:96
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:554:96
 ERROR `TestAdvancedChatGenerateTaskPipeline.test_handle_output_moderation_chunk_appends_token._Moderation` is not assignable to attribute `output_moderation_handler` with type `OutputModeration | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:576:66
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:575:66
 ERROR `(**kwargs: Unknown) -> Literal['replace']` is not assignable to attribute `message_replace_to_stream_response` with type `(self: MessageCycleManager, answer: str, reason: str = '') -> MessageReplaceStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:605:78
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:604:78
 ERROR `(**kwargs: Unknown) -> Literal['filled']` is not assignable to attribute `human_input_form_filled_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueHumanInputFormFilledEvent, task_id: str) -> HumanInputFormFilledResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:618:92
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:617:92
 ERROR `(**kwargs: Unknown) -> Literal['timeout']` is not assignable to attribute `human_input_form_timeout_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueHumanInputFormTimeoutEvent, task_id: str) -> HumanInputFormTimeoutResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:619:93
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:618:93
 ERROR Argument `TestAdvancedChatGenerateTaskPipeline.test_save_message_preserves_full_answer_and_sets_usage._Session` is not assignable to parameter `session` with type `Session` in function `core.app.apps.advanced_chat.generate_task_pipeline.AdvancedChatAppGenerateTaskPipeline._save_message` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:691:40
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:690:40
 ERROR `() -> Literal['end']` is not assignable to attribute `_message_end_to_stream_response` with type `(self: AdvancedChatAppGenerateTaskPipeline) -> MessageEndStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:699:52
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:698:52
 ERROR `(answer: Unknown) -> Literal['safe']` is not assignable to attribute `handle_output_moderation_when_task_finished` with type `(self: BasedGenerateTaskPipeline[Unknown], completion: str) -> str | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:726:84
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:725:84
 ERROR `(**kwargs: Unknown) -> Literal['replace']` is not assignable to attribute `message_replace_to_stream_response` with type `(self: MessageCycleManager, answer: str, reason: str = '') -> MessageReplaceStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:727:78
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:726:78
 ERROR `() -> Literal['end']` is not assignable to attribute `_message_end_to_stream_response` with type `(self: AdvancedChatAppGenerateTaskPipeline) -> MessageEndStreamResponse` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:728:52
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:727:52
 ERROR `(**kwargs: Unknown) -> Literal['failed']` is not assignable to attribute `workflow_node_finish_to_stream_response` with type `(self: WorkflowResponseConverter, *, event: QueueNodeExceptionEvent | QueueNodeFailedEvent | QueueNodeSucceededEvent, task_id: str) -> NodeFinishStreamResponse | None` [bad-assignment]
-   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:750:89
+   --> tests/unit_tests/core/app/apps/advanced_chat/test_generate_task_pipeline_core.py:749:89
 ERROR Argument `DummyAccount` is not assignable to parameter `user` with type `Account | EndUser` in function `core.app.apps.agent_app.app_generator.AgentAppGenerator.generate` [bad-argument-type]
   --> tests/unit_tests/core/app/apps/agent_app/test_app_generator.py:43:22
 ERROR Argument `DummyAccount` is not assignable to parameter `user` with type `Account | EndUser` in function `core.app.apps.agent_app.app_generator.AgentAppGenerator.generate` [bad-argument-type]
@@ -3679,61 +3701,65 @@
 ERROR Argument `TestWorkflowBasedAppRunner.test_handle_graph_run_events_and_pause_notifications._QueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
    --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:329:55
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:355:30
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:358:30
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:356:30
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:359:30
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:357:30
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:360:30
 ERROR Type `object` is not iterable [not-iterable]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:359:69
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:362:69
 ERROR Type `object` is not iterable [not-iterable]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:360:71
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:363:71
 ERROR Type `object` is not iterable [not-iterable]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:361:39
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:364:39
 ERROR Argument `TestWorkflowBasedAppRunner.test_handle_node_events_publishes_queue_events._QueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:372:55
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:376:55
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:380:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:384:13
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:390:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:394:13
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:401:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:405:13
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:412:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:416:13
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:428:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:432:13
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:442:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:446:13
 ERROR Argument `TestWorkflowBasedAppRunner.test_handle_human_input_form_filled_event_preserves_submitted_data._QueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:470:55
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:474:55
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:482:13
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:486:13
 ERROR Argument `TestWorkflowBasedAppRunner.test_handle_start_node_result_events_project_outputs._QueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:559:55
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:563:55
 ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:577:30
+   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_core.py:581:30
 ERROR Argument `_DummyQueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
   --> tests/unit_tests/core/app/apps/test_workflow_app_runner_notifications.py:36:51
 ERROR Argument `_DummyWorkflowEntry` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-  --> tests/unit_tests/core/app/apps/test_workflow_app_runner_notifications.py:52:26
+  --> tests/unit_tests/core/app/apps/test_workflow_app_runner_notifications.py:54:26
+ERROR Argument `_DummyQueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
+  --> tests/unit_tests/core/app/apps/test_workflow_app_runner_notifications.py:68:51
+ERROR Argument `_DummyWorkflowEntry` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
+  --> tests/unit_tests/core/app/apps/test_workflow_app_runner_notifications.py:88:26
 ERROR Class member `_RecordingWorkflowAppRunner._publish_event` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:54:9
-ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:110:26
+  --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:55:9
 ERROR Argument `SimpleNamespace` is not assignable to parameter `application_generate_entity` with type `AdvancedChatAppGenerateEntity | WorkflowAppGenerateEntity` in function `core.app.apps.common.workflow_response_converter.WorkflowResponseConverter.__init__` [bad-argument-type]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:138:37
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:114:37
+ERROR Argument `SimpleNamespace` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner._handle_event` [bad-argument-type]
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:147:26
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:259:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:289:12
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:260:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:290:12
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:263:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:293:12
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:280:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:310:12
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:281:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:311:12
 ERROR Object of class `StreamResponse` has no attribute `data` [missing-attribute]
-   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:284:12
+   --> tests/unit_tests/core/app/apps/test_workflow_pause_events.py:314:12
 ERROR Object of class `FileInputConfig` has no attribute `option_source`
 ERROR Argument `SimpleNamespace` is not assignable to parameter `app_model` with type `App` in function `core.app.apps.workflow.app_config_manager.WorkflowAppConfigManager.get_app_config` [bad-argument-type]
   --> tests/unit_tests/core/app/apps/workflow/test_app_config_manager.py:23:66
@@ -4913,23 +4939,25 @@
 ERROR Cannot instantiate `CeleryWorkflowNodeExecutionRepository` because the following members are abstract: `save_execution_data` [bad-instantiation]
    --> tests/unit_tests/core/repositories/test_celery_workflow_node_execution_repository.py:297:53
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._build_email_recipients` [bad-argument-type]
-  --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:91:21
+  --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:88:21
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._build_email_recipients` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:127:21
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:124:21
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._build_email_recipients` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:158:21
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:155:21
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._build_email_recipients` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:184:21
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:181:21
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._build_email_recipients` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:214:21
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:211:21
 ERROR Argument `object` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._delivery_method_to_model` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:257:57
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:254:57
+ERROR Argument `_DummyForm` is not assignable to parameter `form_model` with type `HumanInputForm` in function `core.repositories.human_input_repository.HumanInputFormRecord.from_models` [bad-argument-type]
+   --> tests/unit_tests/core/repositories/test_human_input_form_repository_impl.py:435:51
 ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._query_workspace_members_by_ids` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_repository.py:321:57
+   --> tests/unit_tests/core/repositories/test_human_input_repository.py:320:57
 ERROR Argument `_FakeSession` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._query_all_workspace_members` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_repository.py:331:54
+   --> tests/unit_tests/core/repositories/test_human_input_repository.py:330:54
 ERROR Argument `Literal['sess']` is not assignable to parameter `session` with type `Session` in function `core.repositories.human_input_repository.HumanInputFormRepositoryImpl._delivery_method_to_model` [bad-argument-type]
-   --> tests/unit_tests/core/repositories/test_human_input_repository.py:375:53
+   --> tests/unit_tests/core/repositories/test_human_input_repository.py:374:53
 ERROR Argument `Literal['invalid']` is not assignable to parameter `session_factory` with type `Engine | sessionmaker[Unknown]` in function `core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository.__init__` [bad-argument-type]
    --> tests/unit_tests/core/repositories/test_sqlalchemy_workflow_execution_repository.py:101:33
 ERROR `None` is not assignable to attribute `_creator_user_id` with type `str` [bad-assignment]
@@ -5728,27 +5756,35 @@
 ERROR Cannot set item in `dict[str, str]` [unsupported-operation]
    --> tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py:866:52
 ERROR Class member `StaticForm.id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:89:9
+  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:91:9
 ERROR Class member `StaticForm.submission_token` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:93:9
+  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:95:9
 ERROR Class member `StaticForm.recipients` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:97:9
+  --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:99:9
 ERROR Class member `StaticForm.rendered_content` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:101:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:103:9
 ERROR Class member `StaticForm.selected_action_id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:105:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:107:9
 ERROR Class member `StaticForm.submitted_data` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:109:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:111:9
 ERROR Class member `StaticForm.submitted` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:113:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:115:9
 ERROR Class member `StaticForm.status` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:117:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:119:9
 ERROR Class member `StaticForm.expiration_time` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:121:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:123:9
 ERROR Class member `StaticRepo.get_form` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:129:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:131:9
 ERROR Class member `StaticRepo.create_form` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:135:9
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:137:9
+ERROR Argument `core.workflow.human_input.entities.HumanInputNodeData` is not assignable to parameter `data` with type `graphon.nodes.human_input.entities.HumanInputNodeData` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:200:14
+ERROR Argument `DifyHumanInputCallback` is not assignable to parameter `hitl_callback` with type `(HITLContext) -> Completed | Expired | PauseRequested` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:203:23
+ERROR Argument `core.workflow.human_input.entities.HumanInputNodeData` is not assignable to parameter `data` with type `graphon.nodes.human_input.entities.HumanInputNodeData` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:216:14
+ERROR Argument `DifyHumanInputCallback` is not assignable to parameter `hitl_callback` with type `(HITLContext) -> Completed | Expired | PauseRequested` in function `graphon.nodes.human_input.human_input_node.HumanInputNode.__init__` [bad-argument-type]
+   --> tests/unit_tests/core/workflow/graph_engine/test_parallel_human_input_join_resume.py:219:23
 ERROR Argument `Sequence[type[GraphEngineEvent]]` is not assignable to parameter `expected_sequence` with type `list[type[GraphEngineEvent]]` in function `TableTestRunner._validate_event_sequence` [bad-argument-type]
    --> tests/unit_tests/core/workflow/graph_engine/test_table_runner.py:403:21
 ERROR `graph` is uninitialized [unbound-name]
@@ -5775,6 +5811,28 @@
    --> tests/unit_tests/core/workflow/graph_engine/test_table_runner.py:703:35
 ERROR Argument `str` is not assignable to parameter `object` with type `LiteralString` in function `list.append` [bad-argument-type]
    --> tests/unit_tests/core/workflow/graph_engine/test_table_runner.py:712:27
+ERROR Class member `_FakeForm.id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:66:9
+ERROR Class member `_FakeForm.submission_token` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:70:9
+ERROR Class member `_FakeForm.recipients` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:74:9
+ERROR Class member `_FakeForm.rendered_content` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:78:9
+ERROR Class member `_FakeForm.selected_action_id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:82:9
+ERROR Class member `_FakeForm.submitted_data` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:86:9
+ERROR Class member `_FakeForm.submitted` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:90:9
+ERROR Class member `_FakeForm.status` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:94:9
+ERROR Class member `_FakeForm.expiration_time` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+  --> tests/unit_tests/core/workflow/human_input/test_callback.py:98:9
+ERROR Class member `_FakeRepository.get_form` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+   --> tests/unit_tests/core/workflow/human_input/test_callback.py:107:9
+ERROR Class member `_FakeRepository.create_form` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
+   --> tests/unit_tests/core/workflow/human_input/test_callback.py:111:9
 ERROR Argument `Iterator[Unknown]` is not assignable to parameter `messages` with type `Generator[ToolInvokeMessage]` in function `core.workflow.nodes.agent.message_transformer.AgentMessageTransformer.transform` [bad-argument-type]
   --> tests/unit_tests/core/workflow/nodes/agent/test_message_transformer.py:15:26
 ERROR Class member `FakeBindingResolver.resolve` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
@@ -5958,47 +6016,57 @@
 ERROR Argument `Response` is not assignable to parameter `response` with type `HttpResponse` in function `graphon.nodes.http_request.entities.Response.__init__` [bad-argument-type]
    --> tests/unit_tests/core/workflow/nodes/http_request/test_http_request_node.py:161:17
 ERROR Class member `_InMemoryFormEntity.id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:75:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:74:9
 ERROR Class member `_InMemoryFormEntity.submission_token` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:79:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:78:9
 ERROR Class member `_InMemoryFormEntity.recipients` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:83:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:82:9
 ERROR Class member `_InMemoryFormEntity.rendered_content` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:87:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:86:9
 ERROR Class member `_InMemoryFormEntity.selected_action_id` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:91:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:90:9
 ERROR Class member `_InMemoryFormEntity.submitted_data` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
-  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:95:9
+  --> tests/unit_tests/core/workflow/nodes/human_input/test_entities.py:94:9
 ERROR Class member `_InMemoryFormEntity.submitted` overrides a member in a parent class but is missing an `@override` decorator [missing-override-deco\n\n... (truncated) ...

@github-actions

Copy link
Copy Markdown
Contributor

Pyrefly Type Coverage

Metric Base PR Delta
Type coverage 51.58% 51.70% +0.12%
Strict coverage 51.10% 51.21% +0.11%
Typed symbols 31,008 31,177 +169
Untyped symbols 29,384 29,403 +19
Modules 2935 2949 +14

@github-actions github-actions Bot added the web This relates to changes on the web. label Jun 30, 2026
@WH-2099 WH-2099 changed the title WIP: refactor: migrate HITL logic back to Dify refactor(api): migrate HITL logic back to Dify Jun 30, 2026
@WH-2099 WH-2099 self-assigned this Jun 30, 2026
@WH-2099 WH-2099 requested a review from iamjoel as a code owner June 30, 2026 11:32
Comment thread api/core/app/entities/task_entities.py Outdated
"""

TYPE: Literal[PauseReasonType.HUMAN_INPUT_REQUIRED] = PauseReasonType.HUMAN_INPUT_REQUIRED
TYPE: Literal[PauseReasonType.HITL_REQUIRED] = PauseReasonType.HITL_REQUIRED

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is incorrect. The HumanInputRequiredPauseReasonPayload is used in Service API response, the enum name should keep the original human_input_requrired

@QuantumGhost QuantumGhost marked this pull request as draft June 30, 2026 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor 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.

[Refactor/Chore] Migrate HITL logic back to Dify

2 participants