Commit Graph

3081 Commits

Author SHA1 Message Date
116ec9dd04 Read the current implementation and consider the following problem (vibe-kanban 25d8b973)
Currently, the HumanInput node yields a `HumanInputFormFilledEvent` event while form is submmited. However, for form level timeout, current no event about timeout is emitted. This makes the frontend UI not updated while the events of time out are sent to the frontend.

Analysis this problem, propose a way to resolve this issue.
2026-01-27 08:46:41 +08:00
b59713b980 Return the form expired error code in get form definition in WEbAPp Api (vibe-kanban 758765b0) 2026-01-26 16:14:02 +08:00
80f55a625d fix(api): ensure action id is not empty if the form timeout 2026-01-26 11:46:24 +08:00
33a830cbc9 refactor(api): rename placeholder to default_value in various parts
Previously the fields / classes are named with `placeholder`. However,
the actual purpose is to use as default values. This commit addresses
this problem by correcting names for relevant fields / classes.

- FormInputPlaceholder
- FormInput.placeholder
- HumanInputRequiredResponse.resolved_placeholder_values
- HumanInputFormDefinition.resolved_placeholder_values
- FormCreateParams.resolved_placeholder_values
- HumanInputRequired.resolved_placeholder_values
- The `resolved_placeholder_values` argument of _create_human_input_delivery_test_form
- The `resolved_placeholder_values` inside _jsonify_form_definition
2026-01-23 15:05:18 +08:00
67c7ca7da7 Do not allow create WorkflowTool from workflows containing HumanInput nodes (vibe-kanban 9e27ac53)
The HumanInput node will pause the execution of workflow if execution, while WorkflowTool works in a blocking manner. (Receiving arguments and returning results once finished). The two mode are inherently incompatible.

The goal of this change is to forbid workflows containing HumanInput node being published as WorkflowTool.

Please check the current implementation and propose a solution.
2026-01-21 16:29:49 +08:00
05f9ea4220 chore(api): send a ping event immediately for /events api 2026-01-21 16:21:24 +08:00
20be1dd819 feat(api): support variable reference and substitution in Email delivery
The EmailDeliveryConfig.body now support referencing variables generated
by precedent nodes.
2026-01-21 15:26:25 +08:00
ef25255bfe fix(api): close connection for workflow_paused event
This only affect new connection, not connections which requests
state snapshots.
2026-01-21 13:48:50 +08:00
b529c78882 fix(api): send the node state snapshots while reestablish subscription 2026-01-21 09:51:34 +08:00
70f12ad310 fix(api): preserve the output generated before pausing 2026-01-19 16:43:01 +08:00
4d3a553ec9 Check the commit 6337a9a125 and revert engine support for node resumption flag (vibe-kanban 8057be68) 2026-01-19 16:23:35 +08:00
33dd9c8ad7 chore(api): fix lint and style issues 2026-01-19 16:22:52 +08:00
6bf6bf6a2a feat(api): implement test form delivery & submission logic (vibe-kanban 89cd6a22)
This ensures that user can receive & submit form while using email
delivery test.
2026-01-19 09:52:30 +08:00
2db638b992 Add a configuration for controlling the redis instance / type used for streaming events between celery worker and api (vibe-kanban 08e07904)
Currently, the celery worker executing workflows / chatflows uses redis pubsub to publish events to api.
(See \_topic\_msg\_generator and \_publish\_streaming\_response)

The current implementation uses the default redis client.

For large scale deployment, we need to use a dedicated redis cluster to ensure performance.

To achieve this, you should:

1. introduce a dedicated configuration class to control

  the redis address used for pubsub. (Ideally, there should only be one configuration item such as `pubsub_redis_url`, and its default value should be the original redis confugration.)

2. Add an option to switch between pubsub and sharded pubsub. When shared pubsub is specified, the ShardedRedisBroadcastChannel should be used instead.

COmplete the task above, add some unit tests.
2026-01-19 07:40:44 +08:00
afdf2397f2 Change the is_resumption field in WorkflowStarted event into reason (vibe-kanban 19ac040e)
Reason should be an enumeration with only one member `resumption` currently.

Please update these part of events:

- Graph / Engine Event (GraphRunStartedEvent)
- Queue event (QueueWorkflowStartedEvent)
- SSE response event (WorkflowStartStreamResponse)

Besides, you should remove the `is_resumption` flag for `node_started` events; including:

- Queue Event (`QueueNodeStartedEvent`)
- SSE Event (`NodeStartStreamResponse`)
- Node event (`NodeRunStartedEvent`)

After finishing the changes above, adjust related tests.
You should run the affected tests and ensure they can pass. (You should use `uv run pytest` to run tests)
2026-01-18 21:00:25 +08:00
7bc7a8d0ab Length limit for UserAction fields (vibe-kanban e9ec1f07)
Add the following length limit to UserAction fields:

- limit the length of `id` to 20 chars.
- limit the length of title to 40 chars.

Add some unit tests to ensure the validation rules are enforced.
2026-01-16 18:18:37 +08:00
e50d849913 Implement debug_mode for email delivery (vibe-kanban f32190a0)
The EmailDeliveryConfig in api/core/workflow/nodes/human\_input/entities.py has a field `debug_mode`. When this field is set to `True` in `node_data`, the test run (InvokeFrom.DEBUGGER) and the delivery test should only sent test emails to the current user, instead of sending to the specified recipients.

Please implement this logic, write correspond test cases to ensure that the logic works as expected.
2026-01-15 10:21:32 +08:00
ea90746ed7 feat(api): adjust /pause-details api, add backstage form token 2026-01-15 09:43:16 +08:00
f1b2e1cfb4 feat(api): Add app_id field to HumanInputForm model
This ensures that `HumanInputForm` could be associated to a specific
application without relying on `WorkflowRun`, providing us a smoother
migration path if we want to implement test form.
2026-01-14 16:58:17 +08:00
552b65e36b fix(api): ensure is_resumption is properly propagated to SSE events
While running workflow / chatflow from "Installed Apps" / "Web App"
pages, the `node_started` SSE event is manually serialized from the
pydantic model. This causes the lack of `is_resumption` flag in SSE
events.

This PR addresses the problem by adding a `is_resumption` field to
the serialized dict.
2026-01-14 10:26:57 +08:00
8e0e5d2974 feat(api): send ping while the connection is idle
To keep the connection alive and avoid being closed.
2026-01-14 10:25:13 +08:00
99937aba2e refactor(api): Unify Human Input handling logic 2026-01-13 10:39:55 +08:00
18fd308a81 fix(api): ensure display_in_ui is persisted 2026-01-13 09:30:42 +08:00
6bcd4ad740 fix(api): Ensure is_resumption for node_started event is correctly set 2026-01-13 09:25:44 +08:00
b3069bf154 feat(api): expose workflow_run_id in human_input extra contents 2026-01-09 00:22:59 +08:00
f988619d2c feat(api): adjust model fields and cleanup form creation logic 2026-01-08 10:27:52 +08:00
de428bc9bb feat(api): add human input data to extra contents 2026-01-08 10:21:53 +08:00
2a6b6a873e fix(api): prevent node from running after pausing 2026-01-08 10:03:22 +08:00
3c79bea28f fix(api): fix race condition between workflow execution and SSE subscription 2026-01-07 09:45:12 +08:00
001d2c5062 fix(api): fix invoke_from for workflow is not properly set 2026-01-06 17:19:53 +08:00
24362ce59e feat(api): add node_title to HumanInputFormFilled events 2026-01-06 16:48:31 +08:00
184f7ab144 WIP: feat(api): always use form_token to submit human input form 2026-01-06 08:53:24 +08:00
1ad2b97169 WIP: feat(api): do not return paused node_execution records & preserve node_execution_id across pause 2026-01-04 23:38:40 +08:00
e6eb879c61 fix(api): fix human input form substitution
Fix the issues that output fields are not properly replaced for
humaninput form.
2026-01-04 16:50:24 +08:00
3ab1ad6530 WIP: feat(api): Implement HumanInputFormFilled event 2026-01-04 10:25:00 +08:00
a2e250ce0c WIP: fix(api): handle output variable replacement properly 2026-01-04 01:11:33 +08:00
6337a9a125 WIP: feat(api): add is_resumption to node_started and workflow_started events 2026-01-04 01:10:50 +08:00
f4642f85b7 fix(api): expose resolved_placeholder_values in HUMAN_INPUT_REQUIRED event 2025-12-31 11:29:04 +08:00
37dd61558c feat(api): Implement HITL for Workflow, add is_resumption for start event 2025-12-30 16:40:08 +08:00
74b6b48f40 chore: fix: typing 2025-12-26 15:01:40 +08:00
5d0dd329f2 WIP: human input timeout 2025-12-26 12:34:46 +08:00
203a3a68af WIP: huamninput email sending 2025-12-26 12:34:46 +08:00
e6fbf3a198 WIP: unify Form And FormSubmission 2025-12-26 12:34:46 +08:00
1f64281ce5 WIP: message extra contet 2025-12-26 12:34:46 +08:00
08175ab32a feat: support variable resolution, fix linting 2025-12-26 12:34:26 +08:00
dddcf1de6c WIP: api debugging 2025-12-26 12:33:30 +08:00
f368155995 resume test 2025-12-26 12:16:01 +08:00
c0f1aeddbe WIP: resume 2025-12-26 11:52:49 +08:00
c0e15b9e1b WIP: feat(api): human input service 2025-12-26 11:48:56 +08:00
43348ce1a6 WIP: P4 2025-12-26 11:39:28 +08:00