@solidxai/core 0.1.12-beta.0 → 0.1.12-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/error-messages.d.ts +1 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +1 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/dtos/create-chatter-message.dto.d.ts +1 -0
- package/dist/dtos/create-chatter-message.dto.d.ts.map +1 -1
- package/dist/dtos/create-chatter-message.dto.js +7 -1
- package/dist/dtos/create-chatter-message.dto.js.map +1 -1
- package/dist/dtos/post-chatter-message.dto.d.ts +1 -0
- package/dist/dtos/post-chatter-message.dto.d.ts.map +1 -1
- package/dist/dtos/post-chatter-message.dto.js +6 -1
- package/dist/dtos/post-chatter-message.dto.js.map +1 -1
- package/dist/dtos/update-chatter-message.dto.d.ts +1 -0
- package/dist/dtos/update-chatter-message.dto.d.ts.map +1 -1
- package/dist/dtos/update-chatter-message.dto.js +8 -1
- package/dist/dtos/update-chatter-message.dto.js.map +1 -1
- package/dist/dtos/update-chatter-note-message.dto.d.ts +1 -0
- package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -1
- package/dist/dtos/update-chatter-note-message.dto.js +7 -1
- package/dist/dtos/update-chatter-note-message.dto.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts +1 -0
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +5 -1
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.js +9 -0
- package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
- package/dist/interfaces/chatter-mention-notification.interface.d.ts +27 -0
- package/dist/interfaces/chatter-mention-notification.interface.d.ts.map +1 -0
- package/dist/interfaces/chatter-mention-notification.interface.js +3 -0
- package/dist/interfaces/chatter-mention-notification.interface.js.map +1 -0
- package/dist/jobs/chatter-mention-notification-email-queue-handler.service.d.ts +17 -0
- package/dist/jobs/chatter-mention-notification-email-queue-handler.service.d.ts.map +1 -0
- package/dist/jobs/chatter-mention-notification-email-queue-handler.service.js +106 -0
- package/dist/jobs/chatter-mention-notification-email-queue-handler.service.js.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.d.ts +12 -0
- package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.js +39 -0
- package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.d.ts +8 -0
- package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.d.ts.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.js +10 -0
- package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.js.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.d.ts +20 -0
- package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.js +48 -0
- package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.js.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.d.ts +12 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.js +39 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.js.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.d.ts +8 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.js +10 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.js.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.d.ts +18 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.js +45 -0
- package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.js.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.d.ts +12 -0
- package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.d.ts.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.js +39 -0
- package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.js.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.d.ts +8 -0
- package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.d.ts.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.js +10 -0
- package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.js.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.d.ts +18 -0
- package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.d.ts.map +1 -0
- package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.js +45 -0
- package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.js.map +1 -0
- package/dist/seeders/seed-data/solid-core-metadata.json +21 -0
- package/dist/services/chatter-message.service.d.ts +7 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +85 -4
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +14 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +136 -0
- package/docs/agent-builder/team-ready-note-agent-builder.md +305 -0
- package/docs/agent-hub-grooming.md +301 -0
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
- package/docs/datasource-introspection-ddl-analysis.md +326 -0
- package/docs/datasource-introspection-implementation-plan.md +306 -0
- package/docs/grouping-enhancements.md +89 -0
- package/docs/java-spring/README.md +3 -0
- package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
- package/docs/module-package-import-handoff.md +691 -0
- package/docs/seed-changes.md +65 -0
- package/docs/test-data-workflow.md +200 -0
- package/docs/type-declaration-import-issue.md +24 -0
- package/docs/workflow/business-automation-example-notes.md +309 -0
- package/docs/workflow/data-engineering-pipeline-example-notes.md +330 -0
- package/docs/workflow/foreach-example-notes.md +187 -0
- package/docs/workflow/hello-world-example-notes.md +271 -0
- package/docs/workflow/kestra-concepts-plugins-blueprints.md +315 -0
- package/docs/workflow/loop-until-example-notes.md +198 -0
- package/docs/workflow/microservices-and-apis-example-notes.md +264 -0
- package/docs/workflow/samples.md +25 -0
- package/docs/workflow/what-is-kestra.md +79 -0
- package/docs/workflow/workflow-core-module-handoff-summary.md +191 -0
- package/docs/workflow/workflow-module-brd.md +185 -0
- package/docs/workflow/workflow-module-domain-model.md +252 -0
- package/docs/workflow/workflow-module-metadata-dsl.md +302 -0
- package/docs/workflow/workflow-module-technical-spec.md +293 -0
- package/docs/workflow/workflow-node-type-contracts.md +635 -0
- package/docs/workflow/workflow-node-ui-metadata-contract.md +1262 -0
- package/docs/workflow/workflow-solidx-model-field-spec.md +284 -0
- package/package.json +1 -1
- package/src/constants/error-messages.ts +1 -0
- package/src/dtos/create-chatter-message.dto.ts +5 -0
- package/src/dtos/post-chatter-message.dto.ts +4 -0
- package/src/dtos/update-chatter-message.dto.ts +6 -0
- package/src/dtos/update-chatter-note-message.dto.ts +5 -0
- package/src/entities/chatter-message.entity.ts +3 -0
- package/src/helpers/solid-core-error-codes-provider.service.ts +9 -0
- package/src/interfaces/chatter-mention-notification.interface.ts +29 -0
- package/src/jobs/chatter-mention-notification-email-queue-handler.service.ts +114 -0
- package/src/jobs/database/chatter-mention-notification-email-publisher-database.service.ts +23 -0
- package/src/jobs/database/chatter-mention-notification-email-queue-options-database.ts +9 -0
- package/src/jobs/database/chatter-mention-notification-email-subscriber-database.service.ts +32 -0
- package/src/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.ts +23 -0
- package/src/jobs/rabbitmq/chatter-mention-notification-email-queue-options.ts +9 -0
- package/src/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.ts +30 -0
- package/src/jobs/redis/chatter-mention-notification-email-publisher-redis.service.ts +23 -0
- package/src/jobs/redis/chatter-mention-notification-email-queue-options-redis.ts +9 -0
- package/src/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.ts +30 -0
- package/src/seeders/seed-data/email-templates/chatter-mention-notification.handlebars.html +200 -0
- package/src/seeders/seed-data/solid-core-metadata.json +21 -0
- package/src/services/chatter-message.service.ts +97 -2
- package/src/solid-core.module.ts +14 -0
- package/.claude/settings.local.json +0 -16
- package/CLAUDE.md +0 -26
- package/src/services/1.js +0 -6
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Hello World Example Notes
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This document captures a simple reference workflow with:
|
|
6
|
+
|
|
7
|
+
- a disabled schedule trigger
|
|
8
|
+
- one workflow input
|
|
9
|
+
- a linear task sequence
|
|
10
|
+
- cross-task output references in the final log message
|
|
11
|
+
|
|
12
|
+
Compared with the other examples, this one is intentionally simple and is useful as the baseline topology for a trigger-driven sequential workflow.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Example Workflow YAML
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
id: hello-world
|
|
20
|
+
namespace: tutorial
|
|
21
|
+
labels:
|
|
22
|
+
name: Hello World
|
|
23
|
+
|
|
24
|
+
triggers:
|
|
25
|
+
- id: daily
|
|
26
|
+
type: io.kestra.plugin.core.trigger.Schedule
|
|
27
|
+
cron: 0 9 * * *
|
|
28
|
+
disabled: true
|
|
29
|
+
|
|
30
|
+
inputs:
|
|
31
|
+
- id: user
|
|
32
|
+
type: STRING
|
|
33
|
+
defaults: Rick Astley
|
|
34
|
+
|
|
35
|
+
tasks:
|
|
36
|
+
- id: first_task
|
|
37
|
+
type: io.kestra.plugin.core.output.OutputValues
|
|
38
|
+
description: Return a value used later in the logged greeting.
|
|
39
|
+
values:
|
|
40
|
+
message: "thrilled"
|
|
41
|
+
|
|
42
|
+
- id: second_task
|
|
43
|
+
type: io.kestra.plugin.scripts.shell.Commands
|
|
44
|
+
description: Run quick shell commands and expose a value as output.
|
|
45
|
+
commands:
|
|
46
|
+
- sleep 0.42
|
|
47
|
+
- echo '::{"outputs":{"returned_data":"mydata"}}::'
|
|
48
|
+
|
|
49
|
+
- id: hello_world
|
|
50
|
+
type: io.kestra.plugin.core.log.Log
|
|
51
|
+
description: Log a welcome message using the inputs and earlier outputs.
|
|
52
|
+
message: |
|
|
53
|
+
Welcome to Kestra, {{ inputs.user }}!
|
|
54
|
+
We are {{ outputs.first_task.values.message }} to have you. Here is your output from the second task: {{outputs.second_task.vars}}.
|
|
55
|
+
|
|
56
|
+
description: |
|
|
57
|
+
**Use case:** Intro to Kestra that collects a `user` input and writes a friendly log.
|
|
58
|
+
**Trigger:** Disabled daily run at 09:00, left in place to show how scheduling works.
|
|
59
|
+
**Highlights:**
|
|
60
|
+
- Emit sample values to demonstrate how outputs travel between tasks.
|
|
61
|
+
- Run a shell command and surface its output for downstream use.
|
|
62
|
+
- Log the combined greeting using both inputs and prior outputs.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## What This Example Adds
|
|
68
|
+
|
|
69
|
+
This example is useful because it is the cleanest reference for:
|
|
70
|
+
|
|
71
|
+
- a simple trigger group
|
|
72
|
+
- a simple top-level input
|
|
73
|
+
- a purely linear task flow
|
|
74
|
+
- output propagation across multiple tasks
|
|
75
|
+
- a beginner-friendly workflow shape
|
|
76
|
+
|
|
77
|
+
It is a good baseline workflow to validate that the editor handles the most common happy path before layering in control flow and nested groups.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## High-Level Structure
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
Triggers
|
|
85
|
+
└── daily
|
|
86
|
+
|
|
87
|
+
Main Flow
|
|
88
|
+
first_task
|
|
89
|
+
|
|
|
90
|
+
v
|
|
91
|
+
second_task
|
|
92
|
+
|
|
|
93
|
+
v
|
|
94
|
+
hello_world
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Another useful linear representation:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
Start
|
|
101
|
+
|
|
|
102
|
+
v
|
|
103
|
+
[trigger group: daily]
|
|
104
|
+
|
|
|
105
|
+
v
|
|
106
|
+
first_task
|
|
107
|
+
|
|
|
108
|
+
v
|
|
109
|
+
second_task
|
|
110
|
+
|
|
|
111
|
+
v
|
|
112
|
+
hello_world
|
|
113
|
+
|
|
|
114
|
+
v
|
|
115
|
+
End
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Main Note
|
|
121
|
+
|
|
122
|
+
### Example With Trigger
|
|
123
|
+
|
|
124
|
+
This is the key point of this example.
|
|
125
|
+
|
|
126
|
+
It confirms the simpler trigger case:
|
|
127
|
+
|
|
128
|
+
- one schedule trigger
|
|
129
|
+
- one straight-line task chain
|
|
130
|
+
- no branching
|
|
131
|
+
- no nested control-flow container
|
|
132
|
+
|
|
133
|
+
This makes it a strong baseline reference for trigger-aware topology rendering.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Trigger Notes
|
|
138
|
+
|
|
139
|
+
The screenshots again reinforce the trigger-group treatment:
|
|
140
|
+
|
|
141
|
+
- triggers appear in a dedicated grouped region
|
|
142
|
+
- they are visually distinct from normal tasks
|
|
143
|
+
- the group connects into the main workflow sequence
|
|
144
|
+
- disabled triggers are still shown
|
|
145
|
+
|
|
146
|
+
For SolidX:
|
|
147
|
+
|
|
148
|
+
- the trigger group should remain visible in both topology and edit views
|
|
149
|
+
- disabled state should be preserved in the rendered metadata
|
|
150
|
+
- trigger visualization should not require trigger editing to be complete
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Inputs Notes
|
|
155
|
+
|
|
156
|
+
This example includes one top-level input:
|
|
157
|
+
|
|
158
|
+
- `user`
|
|
159
|
+
|
|
160
|
+
That makes it useful as a lightweight reference for workflow-level inputs without the extra complexity of multiple configurable runtime endpoints.
|
|
161
|
+
|
|
162
|
+
The workflow editor will eventually need to support:
|
|
163
|
+
|
|
164
|
+
- displaying workflow inputs clearly
|
|
165
|
+
- editing them through code first
|
|
166
|
+
- later, optionally surfacing them in a schema-driven workflow settings experience
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Output Propagation Notes
|
|
171
|
+
|
|
172
|
+
This example is also a nice reference for how outputs flow between tasks.
|
|
173
|
+
|
|
174
|
+
### Output Usage Pattern
|
|
175
|
+
|
|
176
|
+
- `first_task` emits `values.message`
|
|
177
|
+
- `second_task` emits shell-derived output data
|
|
178
|
+
- `hello_world` consumes both
|
|
179
|
+
|
|
180
|
+
This is useful for docs and UI because it demonstrates:
|
|
181
|
+
|
|
182
|
+
- task outputs are part of the workflow authoring experience
|
|
183
|
+
- users need help understanding available upstream outputs
|
|
184
|
+
- code completion and docs should eventually assist with these references
|
|
185
|
+
|
|
186
|
+
The final log task is effectively a small example of expression-aware authoring.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Topology Notes
|
|
191
|
+
|
|
192
|
+
The topology for this workflow is intentionally minimal:
|
|
193
|
+
|
|
194
|
+
- trigger group at the top
|
|
195
|
+
- one vertical line of tasks
|
|
196
|
+
- no branches
|
|
197
|
+
- no nested containers
|
|
198
|
+
|
|
199
|
+
This means it should be treated as the baseline layout contract for simple workflows.
|
|
200
|
+
|
|
201
|
+
If this example renders poorly, the editor is not yet ready for the more advanced ones.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Edit View Notes
|
|
206
|
+
|
|
207
|
+
The edit screenshot again supports the same basic composition:
|
|
208
|
+
|
|
209
|
+
- left: code
|
|
210
|
+
- right: flow
|
|
211
|
+
|
|
212
|
+
This example is especially useful here because the structure is easy to visually verify against the YAML without much interpretation.
|
|
213
|
+
|
|
214
|
+
That makes it a good smoke-test workflow for:
|
|
215
|
+
|
|
216
|
+
- YAML-to-flow transformation
|
|
217
|
+
- trigger rendering
|
|
218
|
+
- icon mapping
|
|
219
|
+
- sequential node spacing
|
|
220
|
+
- add/edit/delete affordances
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Implications For SolidX
|
|
225
|
+
|
|
226
|
+
This example should be used as the default sanity-check workflow for the editor because it combines:
|
|
227
|
+
|
|
228
|
+
- trigger presence
|
|
229
|
+
- inputs
|
|
230
|
+
- outputs
|
|
231
|
+
- sequential task chaining
|
|
232
|
+
|
|
233
|
+
without introducing:
|
|
234
|
+
|
|
235
|
+
- branching
|
|
236
|
+
- grouping containers
|
|
237
|
+
- nested child tasks
|
|
238
|
+
|
|
239
|
+
So it is likely the best first example for verifying the full authoring loop.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Pending Feature Notes
|
|
244
|
+
|
|
245
|
+
This example highlights a few future UX improvements:
|
|
246
|
+
|
|
247
|
+
- workflow-level input editing surface
|
|
248
|
+
- output reference assistance in code editing
|
|
249
|
+
- trigger-specific docs and status rendering
|
|
250
|
+
- task output discovery in the docs side panel or schema editor
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Screenshot References
|
|
255
|
+
|
|
256
|
+
These screenshots informed the notes above:
|
|
257
|
+
|
|
258
|
+
- `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.14.06.png`
|
|
259
|
+
- `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.14.19.png`
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Recommended Follow-On Use
|
|
264
|
+
|
|
265
|
+
This example should be used as a reference for:
|
|
266
|
+
|
|
267
|
+
1. simple trigger-group rendering
|
|
268
|
+
2. linear workflow layout validation
|
|
269
|
+
3. workflow input handling
|
|
270
|
+
4. output-reference awareness in authoring
|
|
271
|
+
5. smoke-testing the end-to-end code-to-flow editor behavior
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# Kestra Concepts, Plugins, and Blueprints
|
|
2
|
+
|
|
3
|
+
This note summarizes the Kestra Academy pages from the `Concepts` section plus the `Plugins` and `Blueprints` lessons. The goal is to translate Kestra's mental model into design inputs for a reusable SolidX workflow engine and builder module.
|
|
4
|
+
|
|
5
|
+
## Flows
|
|
6
|
+
|
|
7
|
+
A flow is the top-level workflow container. It defines:
|
|
8
|
+
|
|
9
|
+
- a unique `id`
|
|
10
|
+
- a `namespace`
|
|
11
|
+
- the `tasks` that perform the work
|
|
12
|
+
|
|
13
|
+
Kestra treats the flow as the unit of orchestration. The flow holds both the tasks and the orchestration logic that determines how those tasks relate. Flows can be authored in YAML, through a no-code editor, or with AI assistance.
|
|
14
|
+
|
|
15
|
+
Important behavior:
|
|
16
|
+
|
|
17
|
+
- Every flow belongs to a namespace
|
|
18
|
+
- Namespaces act like hierarchical folders
|
|
19
|
+
- Flow `id` and `namespace` become permanent after save
|
|
20
|
+
|
|
21
|
+
### Design implication for us
|
|
22
|
+
|
|
23
|
+
We will need a first-class workflow definition aggregate with stable identity, logical grouping, versioning, and a representation that can support both code-based and visual editing.
|
|
24
|
+
|
|
25
|
+
## Tasks
|
|
26
|
+
|
|
27
|
+
Tasks are the individual executable steps in a flow. They perform discrete actions such as:
|
|
28
|
+
|
|
29
|
+
- calling an API
|
|
30
|
+
- running code
|
|
31
|
+
- querying a database
|
|
32
|
+
- sending a notification
|
|
33
|
+
|
|
34
|
+
Kestra highlights two broad task categories:
|
|
35
|
+
|
|
36
|
+
- Runnable tasks: do actual work
|
|
37
|
+
- Flowable tasks: control orchestration behavior
|
|
38
|
+
|
|
39
|
+
Every task has at least:
|
|
40
|
+
|
|
41
|
+
- `id`
|
|
42
|
+
- `type`
|
|
43
|
+
|
|
44
|
+
Task-specific properties then vary by plugin/task type.
|
|
45
|
+
|
|
46
|
+
### Design implication for us
|
|
47
|
+
|
|
48
|
+
Our model should distinguish between:
|
|
49
|
+
|
|
50
|
+
- step identity
|
|
51
|
+
- step type
|
|
52
|
+
- step configuration
|
|
53
|
+
- executable work steps versus control-flow steps
|
|
54
|
+
|
|
55
|
+
This is likely the start of a polymorphic node model in our domain.
|
|
56
|
+
|
|
57
|
+
## Inputs
|
|
58
|
+
|
|
59
|
+
Inputs parameterize a flow so it can be executed with different values without changing the definition. Kestra inputs have:
|
|
60
|
+
|
|
61
|
+
- `id`
|
|
62
|
+
- `type`
|
|
63
|
+
|
|
64
|
+
Common optional properties include:
|
|
65
|
+
|
|
66
|
+
- `defaults`
|
|
67
|
+
- `displayName`
|
|
68
|
+
- `required`
|
|
69
|
+
- `description`
|
|
70
|
+
|
|
71
|
+
Kestra supports multiple input types such as string, integer, select, JSON, file, and URI. Inputs are referenced via expressions like `{{ inputs.name }}`.
|
|
72
|
+
|
|
73
|
+
### Design implication for us
|
|
74
|
+
|
|
75
|
+
We need a typed workflow input model with validation, defaults, UI metadata, and runtime binding support. Inputs should be usable both at manual execution time and by automated triggers.
|
|
76
|
+
|
|
77
|
+
## Outputs
|
|
78
|
+
|
|
79
|
+
Outputs are runtime results produced by tasks. They are stored in the execution context and made available to downstream tasks. Outputs can be:
|
|
80
|
+
|
|
81
|
+
- simple values
|
|
82
|
+
- structured data
|
|
83
|
+
- files
|
|
84
|
+
|
|
85
|
+
They are referenced using expressions like `{{ outputs.task_id.output_value }}`.
|
|
86
|
+
|
|
87
|
+
Kestra also introduces the idea that an entire flow can expose outputs, not just tasks.
|
|
88
|
+
|
|
89
|
+
### Design implication for us
|
|
90
|
+
|
|
91
|
+
We need an execution context model that can store and resolve:
|
|
92
|
+
|
|
93
|
+
- per-step outputs
|
|
94
|
+
- flow-level outputs
|
|
95
|
+
- file or artifact references
|
|
96
|
+
|
|
97
|
+
This becomes a core part of runtime execution and expression resolution.
|
|
98
|
+
|
|
99
|
+
## Triggers
|
|
100
|
+
|
|
101
|
+
Triggers automate flow execution. Kestra describes them as the "when" of a workflow. Examples include:
|
|
102
|
+
|
|
103
|
+
- schedules
|
|
104
|
+
- polling
|
|
105
|
+
- realtime events
|
|
106
|
+
- webhooks
|
|
107
|
+
- flow completion triggers
|
|
108
|
+
|
|
109
|
+
Triggers have their own `id`, `type`, and type-specific configuration. They can also pass input values into a flow when they fire. A single flow can have multiple triggers.
|
|
110
|
+
|
|
111
|
+
### Design implication for us
|
|
112
|
+
|
|
113
|
+
We need a first-class trigger model that supports:
|
|
114
|
+
|
|
115
|
+
- multiple trigger instances per workflow
|
|
116
|
+
- trigger-specific configuration
|
|
117
|
+
- input injection
|
|
118
|
+
- manual and automated execution paths
|
|
119
|
+
|
|
120
|
+
This likely means triggers should be separate domain entities attached to a workflow definition rather than being embedded as anonymous config blobs only.
|
|
121
|
+
|
|
122
|
+
## Expressions
|
|
123
|
+
|
|
124
|
+
Expressions are the dynamic binding and transformation layer. Kestra uses `{{ }}` syntax and allows access to runtime context such as:
|
|
125
|
+
|
|
126
|
+
- `inputs`
|
|
127
|
+
- `outputs`
|
|
128
|
+
- `flow`
|
|
129
|
+
- `execution`
|
|
130
|
+
- `trigger`
|
|
131
|
+
|
|
132
|
+
Expressions can do more than variable lookup. They can:
|
|
133
|
+
|
|
134
|
+
- transform values
|
|
135
|
+
- parse JSON
|
|
136
|
+
- format dates
|
|
137
|
+
- perform calculations
|
|
138
|
+
|
|
139
|
+
### Design implication for us
|
|
140
|
+
|
|
141
|
+
We need to make an early architectural decision about the expression system:
|
|
142
|
+
|
|
143
|
+
- whether to design our own expression format
|
|
144
|
+
- whether to embed an existing engine
|
|
145
|
+
- what execution context objects are exposed
|
|
146
|
+
- how expressions are validated at design time versus resolved at runtime
|
|
147
|
+
|
|
148
|
+
This is a foundational concern because it affects inputs, outputs, conditions, triggers, and task configuration.
|
|
149
|
+
|
|
150
|
+
## Flowable Tasks
|
|
151
|
+
|
|
152
|
+
Flowable tasks control orchestration instead of doing business work directly. Kestra highlights patterns such as:
|
|
153
|
+
|
|
154
|
+
- conditional branching with `If` and `Switch`
|
|
155
|
+
- iteration with `ForEach`, `ForEachItem`, and `LoopUntil`
|
|
156
|
+
- parallel execution
|
|
157
|
+
- subflows for reuse
|
|
158
|
+
|
|
159
|
+
These tasks combine orchestration rules with expressions.
|
|
160
|
+
|
|
161
|
+
### Design implication for us
|
|
162
|
+
|
|
163
|
+
Our workflow graph cannot be modeled as only a flat list of steps. We will need support for:
|
|
164
|
+
|
|
165
|
+
- branching
|
|
166
|
+
- nesting
|
|
167
|
+
- loops
|
|
168
|
+
- fan-out / parallelism
|
|
169
|
+
- reusable subflow invocation
|
|
170
|
+
|
|
171
|
+
This pushes us toward a graph or tree-plus-edges model rather than a simple sequential pipeline model.
|
|
172
|
+
|
|
173
|
+
## Execution
|
|
174
|
+
|
|
175
|
+
An execution is a single run of a flow. Each execution contains task runs, and each task run has its own runtime behavior, outputs, logs, and status.
|
|
176
|
+
|
|
177
|
+
Kestra emphasizes:
|
|
178
|
+
|
|
179
|
+
- execution states such as created, running, success, failed
|
|
180
|
+
- observability through logs, metrics, outputs, topology, and timing views
|
|
181
|
+
- replaying failed task runs or entire executions
|
|
182
|
+
- revisions of flow definitions
|
|
183
|
+
|
|
184
|
+
### Design implication for us
|
|
185
|
+
|
|
186
|
+
We should model workflow definition and workflow execution separately. At minimum, our domain will likely need:
|
|
187
|
+
|
|
188
|
+
- workflow definitions
|
|
189
|
+
- workflow revisions
|
|
190
|
+
- workflow executions
|
|
191
|
+
- step executions
|
|
192
|
+
- execution state transitions
|
|
193
|
+
- logs / metrics / artifacts
|
|
194
|
+
- replay or rerun semantics
|
|
195
|
+
|
|
196
|
+
## Secrets
|
|
197
|
+
|
|
198
|
+
Secrets are sensitive values stored outside workflow definitions and referenced at runtime. Kestra exposes them through expressions via a `secret()` function and avoids leaking them into code, logs, and outputs.
|
|
199
|
+
|
|
200
|
+
### Design implication for us
|
|
201
|
+
|
|
202
|
+
We need a secret reference strategy, not just plain text fields. The module should support:
|
|
203
|
+
|
|
204
|
+
- secure secret references in workflow definitions
|
|
205
|
+
- runtime secret resolution
|
|
206
|
+
- masking in logs and UI
|
|
207
|
+
- separation between design-time config and sensitive runtime values
|
|
208
|
+
|
|
209
|
+
## Plugins
|
|
210
|
+
|
|
211
|
+
Plugins are the extension mechanism that powers tasks and triggers. In Kestra's framing, plugins are the integration and capability layer that connects workflows to:
|
|
212
|
+
|
|
213
|
+
- programming runtimes
|
|
214
|
+
- databases
|
|
215
|
+
- APIs
|
|
216
|
+
- cloud systems
|
|
217
|
+
- notification channels
|
|
218
|
+
|
|
219
|
+
Even "core" capabilities are still exposed as plugin-backed task or trigger types.
|
|
220
|
+
|
|
221
|
+
### Design implication for us
|
|
222
|
+
|
|
223
|
+
This is especially important for our module. We should not hard-code every possible step type into the core engine. We likely need:
|
|
224
|
+
|
|
225
|
+
- a reusable action/task type registry
|
|
226
|
+
- typed configuration schemas per task type
|
|
227
|
+
- trigger type registry
|
|
228
|
+
- optional packaging/distribution story for reusable step providers
|
|
229
|
+
|
|
230
|
+
In SolidX terms, this may become one of the primary extensibility points of the module.
|
|
231
|
+
|
|
232
|
+
## Blueprints
|
|
233
|
+
|
|
234
|
+
Blueprints are curated, ready-to-use example workflows. Kestra presents them as:
|
|
235
|
+
|
|
236
|
+
- working code
|
|
237
|
+
- documentation
|
|
238
|
+
- tags for discovery
|
|
239
|
+
|
|
240
|
+
They are meant to accelerate adoption by giving users validated examples that can be copied and adapted.
|
|
241
|
+
|
|
242
|
+
### Design implication for us
|
|
243
|
+
|
|
244
|
+
A reusable workflow builder module will benefit from a blueprint/template system from the start or at least early in the roadmap. Blueprints can help with:
|
|
245
|
+
|
|
246
|
+
- onboarding
|
|
247
|
+
- discoverability
|
|
248
|
+
- best-practice reuse
|
|
249
|
+
- sample implementations of step types and orchestration patterns
|
|
250
|
+
|
|
251
|
+
## Cross-Cutting Observations
|
|
252
|
+
|
|
253
|
+
Kestra's model repeatedly separates concerns in a very clean way:
|
|
254
|
+
|
|
255
|
+
- Definition versus execution
|
|
256
|
+
- Work steps versus control-flow steps
|
|
257
|
+
- Static configuration versus runtime context
|
|
258
|
+
- Secure references versus plain values
|
|
259
|
+
- Core engine versus plugin-provided capabilities
|
|
260
|
+
|
|
261
|
+
That separation is probably the biggest lesson for our design.
|
|
262
|
+
|
|
263
|
+
## Likely Domain Areas For Our SolidX Module
|
|
264
|
+
|
|
265
|
+
Based on these lessons, our reusable module will probably need domain models for at least:
|
|
266
|
+
|
|
267
|
+
- Workflow definition
|
|
268
|
+
- Workflow revision
|
|
269
|
+
- Workflow namespace or foldering concept
|
|
270
|
+
- Workflow input
|
|
271
|
+
- Workflow output
|
|
272
|
+
- Trigger
|
|
273
|
+
- Step / task
|
|
274
|
+
- Step type registry
|
|
275
|
+
- Step execution
|
|
276
|
+
- Workflow execution
|
|
277
|
+
- Execution logs and artifacts
|
|
278
|
+
- Secret reference
|
|
279
|
+
- Blueprint / template
|
|
280
|
+
|
|
281
|
+
## Metadata / DSL Implication
|
|
282
|
+
|
|
283
|
+
Kestra uses YAML as a human-readable workflow definition format. For our SolidX module, we should expect to define an equivalent metadata representation for workflows that can support:
|
|
284
|
+
|
|
285
|
+
- stable workflow identity
|
|
286
|
+
- typed nodes
|
|
287
|
+
- nested control-flow structures
|
|
288
|
+
- trigger definitions
|
|
289
|
+
- expressions
|
|
290
|
+
- reusable references
|
|
291
|
+
- versioning
|
|
292
|
+
|
|
293
|
+
That representation will need to work for both:
|
|
294
|
+
|
|
295
|
+
- a visual workflow builder
|
|
296
|
+
- a code or JSON/YAML style export/import story
|
|
297
|
+
|
|
298
|
+
## Sources
|
|
299
|
+
|
|
300
|
+
- [Flows](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404093-flows)
|
|
301
|
+
- [Tasks](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404094-tasks)
|
|
302
|
+
- [Inputs](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404096-inputs)
|
|
303
|
+
- [Outputs](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404097-outputs)
|
|
304
|
+
- [Triggers](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404103-triggers)
|
|
305
|
+
- [Expressions](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404099-expressions)
|
|
306
|
+
- [Flowable Tasks](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404106-flowable-tasks)
|
|
307
|
+
- [Execution](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404107-execution)
|
|
308
|
+
- [Secrets](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404115-secrets)
|
|
309
|
+
- [Plugins](https://academy.kestra.io/p/courses/kestra-fundamentals/3492618-plugins-blueprints/11437898-plugins)
|
|
310
|
+
- [Blueprints](https://academy.kestra.io/p/courses/kestra-fundamentals/3492618-plugins-blueprints/11437900-blueprints)
|
|
311
|
+
|
|
312
|
+
## Notes
|
|
313
|
+
|
|
314
|
+
- The extracted lesson text was pulled from the Academy pages directly.
|
|
315
|
+
- Some lessons included image-heavy examples, so the summary focuses on the textual teaching content plus explicit design implications for our module.
|