@solidxai/core 0.1.12-beta.2 → 0.1.12-beta.4
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/.claude/settings.local.json +16 -0
- package/CLAUDE.md +26 -0
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +15 -2
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/constants/media-file-types.d.ts +5 -0
- package/dist/constants/media-file-types.d.ts.map +1 -0
- package/dist/constants/media-file-types.js +27 -0
- package/dist/constants/media-file-types.js.map +1 -0
- package/dist/controllers/media.controller.d.ts +14 -11
- package/dist/controllers/media.controller.d.ts.map +1 -1
- package/dist/controllers/media.controller.js +72 -33
- package/dist/controllers/media.controller.js.map +1 -1
- package/dist/dtos/create-media.dto.d.ts +1 -0
- package/dist/dtos/create-media.dto.d.ts.map +1 -1
- package/dist/dtos/create-media.dto.js +7 -1
- package/dist/dtos/create-media.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +3 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/update-media.dto.d.ts +1 -0
- package/dist/dtos/update-media.dto.d.ts.map +1 -1
- package/dist/dtos/update-media.dto.js +7 -1
- package/dist/dtos/update-media.dto.js.map +1 -1
- package/dist/entities/media.entity.d.ts +1 -0
- package/dist/entities/media.entity.d.ts.map +1 -1
- package/dist/entities/media.entity.js +9 -1
- package/dist/entities/media.entity.js.map +1 -1
- package/dist/enums/auth-type.enum.d.ts +2 -1
- package/dist/enums/auth-type.enum.d.ts.map +1 -1
- package/dist/enums/auth-type.enum.js +1 -0
- package/dist/enums/auth-type.enum.js.map +1 -1
- package/dist/guards/authentication.guard.d.ts +3 -1
- package/dist/guards/authentication.guard.d.ts.map +1 -1
- package/dist/guards/authentication.guard.js +5 -1
- package/dist/guards/authentication.guard.js.map +1 -1
- package/dist/guards/media-signed-url.guard.d.ts +9 -0
- package/dist/guards/media-signed-url.guard.d.ts.map +1 -0
- package/dist/guards/media-signed-url.guard.js +49 -0
- package/dist/guards/media-signed-url.guard.js.map +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +10 -13
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/interfaces.d.ts +19 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +2 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/repository/media.repository.d.ts.map +1 -1
- package/dist/repository/media.repository.js +2 -0
- package/dist/repository/media.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +7 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +87 -3
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -0
- package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js +6 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +114 -13
- package/dist/services/authentication.service.d.ts +1 -0
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +19 -1
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/media-download-url.service.d.ts +21 -0
- package/dist/services/media-download-url.service.d.ts.map +1 -0
- package/dist/services/media-download-url.service.js +67 -0
- package/dist/services/media-download-url.service.js.map +1 -0
- package/dist/services/media-storage.utils.d.ts +27 -0
- package/dist/services/media-storage.utils.d.ts.map +1 -0
- package/dist/services/media-storage.utils.js +82 -0
- package/dist/services/media-storage.utils.js.map +1 -0
- package/dist/services/media.service.d.ts +20 -4
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +157 -55
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +4 -4
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +37 -63
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +5 -5
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +37 -38
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts +1 -0
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +8 -5
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +11 -1
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.js +1 -1
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/seed.command.ts +17 -3
- package/src/constants/media-file-types.ts +44 -0
- package/src/controllers/media.controller.ts +44 -24
- package/src/dtos/create-media.dto.ts +8 -3
- package/src/dtos/create-role-metadata.dto.ts +2 -0
- package/src/dtos/update-media.dto.ts +8 -3
- package/src/entities/media.entity.ts +4 -1
- package/src/enums/auth-type.enum.ts +1 -0
- package/src/guards/authentication.guard.ts +3 -0
- package/src/guards/media-signed-url.guard.ts +41 -0
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +12 -24
- package/src/interfaces.ts +20 -0
- package/src/repository/media.repository.ts +2 -0
- package/src/seeders/module-metadata-seeder.service.ts +109 -3
- package/src/seeders/permission-metadata-seeder.service.ts +6 -1
- package/src/seeders/seed-data/solid-core-metadata.json +114 -13
- package/src/services/1.js +6 -0
- package/src/services/authentication.service.ts +24 -1
- package/src/services/media-download-url.service.ts +67 -0
- package/src/services/media-storage.utils.ts +79 -0
- package/src/services/media.service.ts +189 -59
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +52 -76
- package/src/services/mediaStorageProviders/file-storage-provider.ts +44 -48
- package/src/services/role-metadata.service.ts +17 -5
- package/src/solid-core.module.ts +21 -2
- package/src/subscribers/audit.subscriber.ts +1 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +0 -136
- package/docs/agent-builder/team-ready-note-agent-builder.md +0 -305
- package/docs/agent-hub-grooming.md +0 -301
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
- package/docs/datasource-introspection-ddl-analysis.md +0 -326
- package/docs/datasource-introspection-implementation-plan.md +0 -306
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/module-package-import-handoff.md +0 -691
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
- package/docs/workflow/business-automation-example-notes.md +0 -309
- package/docs/workflow/data-engineering-pipeline-example-notes.md +0 -330
- package/docs/workflow/foreach-example-notes.md +0 -187
- package/docs/workflow/hello-world-example-notes.md +0 -271
- package/docs/workflow/kestra-concepts-plugins-blueprints.md +0 -315
- package/docs/workflow/loop-until-example-notes.md +0 -198
- package/docs/workflow/microservices-and-apis-example-notes.md +0 -264
- package/docs/workflow/samples.md +0 -25
- package/docs/workflow/what-is-kestra.md +0 -79
- package/docs/workflow/workflow-core-module-handoff-summary.md +0 -191
- package/docs/workflow/workflow-module-brd.md +0 -185
- package/docs/workflow/workflow-module-domain-model.md +0 -252
- package/docs/workflow/workflow-module-metadata-dsl.md +0 -302
- package/docs/workflow/workflow-module-technical-spec.md +0 -293
- package/docs/workflow/workflow-node-type-contracts.md +0 -635
- package/docs/workflow/workflow-node-ui-metadata-contract.md +0 -1262
- package/docs/workflow/workflow-solidx-model-field-spec.md +0 -284
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
# LoopUntil Example Notes
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
This document captures a reference workflow for `LoopUntil`. It complements the `ForEach` example by showing a different kind of loop: repeat-until-success rather than iterate-over-values.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Example Workflow YAML
|
|
10
|
-
|
|
11
|
-
```yaml
|
|
12
|
-
id: loop_until_health_check
|
|
13
|
-
namespace: company.team
|
|
14
|
-
|
|
15
|
-
tasks:
|
|
16
|
-
- id: loop
|
|
17
|
-
type: io.kestra.plugin.core.flow.LoopUntil
|
|
18
|
-
condition: "{{ outputs.healthCheck.code == 200 }}"
|
|
19
|
-
checkFrequency:
|
|
20
|
-
interval: PT30S
|
|
21
|
-
maxIterations: 50
|
|
22
|
-
tasks:
|
|
23
|
-
- id: healthCheck
|
|
24
|
-
type: io.kestra.plugin.core.http.Request
|
|
25
|
-
method: GET
|
|
26
|
-
uri: https://kestra.io/
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## What This Example Adds
|
|
32
|
-
|
|
33
|
-
This example is useful because it shows:
|
|
34
|
-
|
|
35
|
-
- condition-based looping
|
|
36
|
-
- repeated polling / health-check behavior
|
|
37
|
-
- loop frequency metadata
|
|
38
|
-
- max-iteration safeguards
|
|
39
|
-
- a loop container with a small loop body
|
|
40
|
-
|
|
41
|
-
It is the clearest reference for workflows that keep trying until a condition becomes true.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## High-Level Structure
|
|
46
|
-
|
|
47
|
-
```text
|
|
48
|
-
Start
|
|
49
|
-
|
|
|
50
|
-
v
|
|
51
|
-
loop
|
|
52
|
-
|
|
|
53
|
-
v
|
|
54
|
-
healthCheck
|
|
55
|
-
|
|
|
56
|
-
v
|
|
57
|
-
repeat until outputs.healthCheck.code == 200
|
|
58
|
-
|
|
|
59
|
-
v
|
|
60
|
-
End
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Conceptually:
|
|
64
|
-
|
|
65
|
-
```text
|
|
66
|
-
Workflow
|
|
67
|
-
└── loop
|
|
68
|
-
└── healthCheck
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Runtime interpretation:
|
|
72
|
-
|
|
73
|
-
```text
|
|
74
|
-
Repeat:
|
|
75
|
-
run healthCheck
|
|
76
|
-
Until:
|
|
77
|
-
outputs.healthCheck.code == 200
|
|
78
|
-
|
|
79
|
-
With:
|
|
80
|
-
interval = PT30S
|
|
81
|
-
maxIterations = 50
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Main Note
|
|
87
|
-
|
|
88
|
-
### Example With `LoopUntil`
|
|
89
|
-
|
|
90
|
-
This is the key purpose of the example.
|
|
91
|
-
|
|
92
|
-
It shows that not all loops are collection-based like `ForEach`.
|
|
93
|
-
|
|
94
|
-
`LoopUntil` is driven by:
|
|
95
|
-
|
|
96
|
-
- a stop condition
|
|
97
|
-
- a repeated body
|
|
98
|
-
- retry/check timing configuration
|
|
99
|
-
- a max-iteration limit
|
|
100
|
-
|
|
101
|
-
So the UI must distinguish between:
|
|
102
|
-
|
|
103
|
-
- looping over values
|
|
104
|
-
- looping until a condition is met
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Topology Notes
|
|
109
|
-
|
|
110
|
-
The screenshot suggests:
|
|
111
|
-
|
|
112
|
-
- `LoopUntil` is rendered as a grouped/container region
|
|
113
|
-
- the loop node appears at the top of that region
|
|
114
|
-
- the loop body task appears within the same grouped area
|
|
115
|
-
- the visual sequence remains vertical and directional
|
|
116
|
-
|
|
117
|
-
This is similar to `ForEach` structurally, but the semantics are different enough that the node metadata and docs must explain the difference clearly.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Loop Semantics Notes
|
|
122
|
-
|
|
123
|
-
This example introduces loop control metadata that is especially important for docs and forms:
|
|
124
|
-
|
|
125
|
-
- `condition`
|
|
126
|
-
- `checkFrequency.interval`
|
|
127
|
-
- `checkFrequency.maxIterations`
|
|
128
|
-
|
|
129
|
-
That means the schema-driven editor should eventually support:
|
|
130
|
-
|
|
131
|
-
- expression-aware editing for the stop condition
|
|
132
|
-
- structured editing for timing/frequency settings
|
|
133
|
-
- clear validation for required loop settings
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## Implications For SolidX Flow Modeling
|
|
138
|
-
|
|
139
|
-
This example implies the loop category should likely have meaningful subtypes:
|
|
140
|
-
|
|
141
|
-
- `ForEach`
|
|
142
|
-
- `LoopUntil`
|
|
143
|
-
|
|
144
|
-
Both may be rendered as loop containers, but their configuration UX differs:
|
|
145
|
-
|
|
146
|
-
- `ForEach` needs collection/value configuration
|
|
147
|
-
- `LoopUntil` needs condition and frequency configuration
|
|
148
|
-
|
|
149
|
-
So the generic metadata contract should preserve enough node-specific structure to power a richer modal form.
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## Editor Notes
|
|
154
|
-
|
|
155
|
-
This example fits the current editor direction well:
|
|
156
|
-
|
|
157
|
-
- code remains the source of truth
|
|
158
|
-
- flow visualizes the loop container and body
|
|
159
|
-
- node editing should be modal and schema-driven
|
|
160
|
-
- docs should explain loop semantics and available configuration
|
|
161
|
-
|
|
162
|
-
This is also a good candidate for future validation because it contains:
|
|
163
|
-
|
|
164
|
-
- expressions
|
|
165
|
-
- loop structure
|
|
166
|
-
- nested tasks
|
|
167
|
-
- timing configuration
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Future UX Notes
|
|
172
|
-
|
|
173
|
-
This example points to a few future needs:
|
|
174
|
-
|
|
175
|
-
- loop-type specific modal forms
|
|
176
|
-
- duration / interval input UX
|
|
177
|
-
- expression assistance for loop conditions
|
|
178
|
-
- better visualization of “repeat until” semantics in the docs panel
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Screenshot References
|
|
183
|
-
|
|
184
|
-
This screenshot informed the notes above:
|
|
185
|
-
|
|
186
|
-
- `/var/folders/z_/h0rqj1693gs4cxm3k_vks86c0000gn/T/TemporaryItems/NSIRD_screencaptureui_hm7Us9/Screenshot 2026-07-10 at 17.18.11.png`
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Recommended Follow-On Use
|
|
191
|
-
|
|
192
|
-
This example should be used as a reference for:
|
|
193
|
-
|
|
194
|
-
1. `LoopUntil` node rendering
|
|
195
|
-
2. condition-based loop semantics
|
|
196
|
-
3. interval / max-iteration configuration UX
|
|
197
|
-
4. differentiating loop subtypes in docs and forms
|
|
198
|
-
5. future expression-aware validation for looping constructs
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
# Microservices and APIs Example Notes
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
This document captures a third reference workflow focused on conditional branching and triggers. It is especially useful for the SolidX workflow UI because it shows how an `if / then / else` structure should appear in topology and how triggers can be visualized as a separate grouped area.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Example Workflow YAML
|
|
10
|
-
|
|
11
|
-
```yaml
|
|
12
|
-
id: microservices-and-apis
|
|
13
|
-
namespace: tutorial
|
|
14
|
-
labels:
|
|
15
|
-
name: Microservices and APIs
|
|
16
|
-
|
|
17
|
-
inputs:
|
|
18
|
-
- id: server_uri
|
|
19
|
-
type: URI
|
|
20
|
-
defaults: https://kestra.io
|
|
21
|
-
|
|
22
|
-
- id: slack_webhook_uri
|
|
23
|
-
type: URI
|
|
24
|
-
defaults: https://kestra.io/api/mock
|
|
25
|
-
|
|
26
|
-
tasks:
|
|
27
|
-
- id: http_request
|
|
28
|
-
type: io.kestra.plugin.core.http.Request
|
|
29
|
-
description: Check the target server endpoint for an HTTP response.
|
|
30
|
-
uri: "{{ inputs.server_uri }}"
|
|
31
|
-
options:
|
|
32
|
-
allowFailed: true
|
|
33
|
-
|
|
34
|
-
- id: check_status
|
|
35
|
-
type: io.kestra.plugin.core.flow.If
|
|
36
|
-
description: Branch based on the HTTP status to alert or confirm health.
|
|
37
|
-
condition: "{{ outputs.http_request.code != 200 }}"
|
|
38
|
-
then:
|
|
39
|
-
- id: server_unreachable_alert
|
|
40
|
-
type: io.kestra.plugin.slack.notifications.SlackIncomingWebhook
|
|
41
|
-
description: Send a Slack alert if the server cannot be reached.
|
|
42
|
-
url: "{{ inputs.slack_webhook_uri }}"
|
|
43
|
-
messageText: "The server {{ inputs.server_uri }} is down!"
|
|
44
|
-
else:
|
|
45
|
-
- id: healthy
|
|
46
|
-
type: io.kestra.plugin.core.log.Log
|
|
47
|
-
description: Log that the server is responding normally.
|
|
48
|
-
message: Everything is fine!
|
|
49
|
-
|
|
50
|
-
triggers:
|
|
51
|
-
- id: daily
|
|
52
|
-
type: io.kestra.plugin.core.trigger.Schedule
|
|
53
|
-
disabled: true
|
|
54
|
-
cron: 0 9 * * *
|
|
55
|
-
|
|
56
|
-
description: |
|
|
57
|
-
**Use case:** Simple microservice health check with conditional alerting.
|
|
58
|
-
**Schedule:** Disabled daily run at 09:00 to show how to automate recurring checks.
|
|
59
|
-
**Highlights:**
|
|
60
|
-
- Probe the target server and capture the HTTP response code.
|
|
61
|
-
- Branch on non-200 results to send a Slack webhook alert; otherwise log success.
|
|
62
|
-
- Parameterize the target URL and webhook for easy reuse across environments.
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## What This Example Adds
|
|
68
|
-
|
|
69
|
-
This example is the clearest reference so far for:
|
|
70
|
-
|
|
71
|
-
- `if / then / else` branching
|
|
72
|
-
- visual trigger grouping
|
|
73
|
-
- workflow inputs at the top level
|
|
74
|
-
- branch child tasks inside a control-flow node
|
|
75
|
-
- separate success and failure paths converging back into the main sequence
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## High-Level Structure
|
|
80
|
-
|
|
81
|
-
The workflow shape is:
|
|
82
|
-
|
|
83
|
-
```text
|
|
84
|
-
Triggers
|
|
85
|
-
└── daily
|
|
86
|
-
|
|
87
|
-
Main Flow
|
|
88
|
-
http_request
|
|
89
|
-
|
|
|
90
|
-
v
|
|
91
|
-
check_status
|
|
92
|
-
├── then: server_unreachable_alert
|
|
93
|
-
└── else: healthy
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Another useful representation is:
|
|
97
|
-
|
|
98
|
-
```text
|
|
99
|
-
Start
|
|
100
|
-
|
|
|
101
|
-
v
|
|
102
|
-
[trigger group: daily]
|
|
103
|
-
|
|
|
104
|
-
v
|
|
105
|
-
http_request
|
|
106
|
-
|
|
|
107
|
-
v
|
|
108
|
-
check_status (If)
|
|
109
|
-
|-- then --> server_unreachable_alert
|
|
110
|
-
|-- else --> healthy
|
|
111
|
-
|
|
|
112
|
-
v
|
|
113
|
-
End
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Main New Note
|
|
119
|
-
|
|
120
|
-
### Example With `if / then / else` Branching
|
|
121
|
-
|
|
122
|
-
This is the key purpose of this example.
|
|
123
|
-
|
|
124
|
-
It shows that a workflow topology renderer must support:
|
|
125
|
-
|
|
126
|
-
- a control-flow node such as `If`
|
|
127
|
-
- visually grouped child branches
|
|
128
|
-
- separate `then` and `else` lanes
|
|
129
|
-
- branch child nodes rendered inside the control-flow region
|
|
130
|
-
- a visual merge back into the primary downstream flow
|
|
131
|
-
|
|
132
|
-
This is not just nested sequencing. It is explicit branching.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Trigger Visualization Notes
|
|
137
|
-
|
|
138
|
-
This example also shows that triggers can be represented as a separate visual group from the main task sequence.
|
|
139
|
-
|
|
140
|
-
Important implications:
|
|
141
|
-
|
|
142
|
-
- triggers should not be treated as ordinary sequential tasks
|
|
143
|
-
- trigger nodes should be rendered in their own grouped zone
|
|
144
|
-
- the trigger group can visually connect into the main workflow start
|
|
145
|
-
- disabled triggers should still be shown, likely with a muted or status-aware treatment
|
|
146
|
-
|
|
147
|
-
For SolidX, this strongly suggests:
|
|
148
|
-
|
|
149
|
-
- trigger rendering belongs in topology and editor views
|
|
150
|
-
- trigger editing can still be delayed, but trigger visualization should be part of the long-term flow model
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Inputs Notes
|
|
155
|
-
|
|
156
|
-
This example highlights workflow-level inputs:
|
|
157
|
-
|
|
158
|
-
- `server_uri`
|
|
159
|
-
- `slack_webhook_uri`
|
|
160
|
-
|
|
161
|
-
That means the workflow-definition editor will eventually need a clean workflow-level configuration surface, not just task-level editing.
|
|
162
|
-
|
|
163
|
-
Good future implications:
|
|
164
|
-
|
|
165
|
-
- workflow metadata and inputs belong in code
|
|
166
|
-
- later, they may also deserve a dedicated schema-driven modal or side panel
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Topology Notes
|
|
171
|
-
|
|
172
|
-
The reference topology demonstrates three distinct visual concepts together:
|
|
173
|
-
|
|
174
|
-
1. trigger group
|
|
175
|
-
2. sequential task node
|
|
176
|
-
3. branching control-flow group
|
|
177
|
-
|
|
178
|
-
That makes this example especially valuable for validating the canvas contract.
|
|
179
|
-
|
|
180
|
-
### Visual Behaviors Observed
|
|
181
|
-
|
|
182
|
-
- the trigger sits inside a green grouped region
|
|
183
|
-
- the `If` task sits inside a blue grouped region
|
|
184
|
-
- the branch children appear inside that `If` region
|
|
185
|
-
- the children are positioned as left and right alternatives
|
|
186
|
-
- dashed directional connectors preserve the sense of control flow
|
|
187
|
-
- the branch appears to rejoin the main vertical sequence
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Implications For SolidX Flow Modeling
|
|
192
|
-
|
|
193
|
-
This example implies the React Flow layer must eventually support at least these structural categories:
|
|
194
|
-
|
|
195
|
-
- simple task node
|
|
196
|
-
- trigger node
|
|
197
|
-
- trigger group container
|
|
198
|
-
- control-flow node
|
|
199
|
-
- branch container
|
|
200
|
-
- branch child node
|
|
201
|
-
|
|
202
|
-
Even if the first pass simplifies some of this, the metadata and transformation layer should be designed with these categories in mind.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Edit-Screen Notes
|
|
207
|
-
|
|
208
|
-
The edit screenshots again reinforce the desired authoring shell:
|
|
209
|
-
|
|
210
|
-
- left: code
|
|
211
|
-
- right: topology / flow
|
|
212
|
-
- docs may be opened contextually when needed
|
|
213
|
-
|
|
214
|
-
This example also shows the code and flow surfaces staying aligned while a structurally richer workflow is displayed.
|
|
215
|
-
|
|
216
|
-
That is useful because it proves the editor cannot assume every workflow is purely linear.
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Control-Flow Contract Notes
|
|
221
|
-
|
|
222
|
-
This example is a good reminder that the DSL remains the source of truth.
|
|
223
|
-
|
|
224
|
-
For this workflow:
|
|
225
|
-
|
|
226
|
-
- branch semantics come from the `If` node contract
|
|
227
|
-
- branch children are defined by `then` and `else`
|
|
228
|
-
- the canvas should reflect those semantics, not invent new ones
|
|
229
|
-
|
|
230
|
-
So the flow renderer should be a structured projection of the DSL, not a freeform graph authoring tool.
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Pending Feature Notes
|
|
235
|
-
|
|
236
|
-
This example highlights future needs:
|
|
237
|
-
|
|
238
|
-
- dedicated trigger authoring UI
|
|
239
|
-
- branch-aware flow rendering
|
|
240
|
-
- grouped region handling for control-flow nodes
|
|
241
|
-
- workflow-level input editing UX
|
|
242
|
-
- branch-aware validation feedback in the editor
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## Screenshot References
|
|
247
|
-
|
|
248
|
-
These screenshots informed the notes above:
|
|
249
|
-
|
|
250
|
-
- `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.11.11.png`
|
|
251
|
-
- `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.11.22.png`
|
|
252
|
-
- `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.11.43.png`
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## Recommended Follow-On Use
|
|
257
|
-
|
|
258
|
-
This example should be used as a reference for:
|
|
259
|
-
|
|
260
|
-
1. `If` node rendering rules
|
|
261
|
-
2. `then` / `else` lane visualization
|
|
262
|
-
3. trigger-group rendering
|
|
263
|
-
4. branch-aware layout logic
|
|
264
|
-
5. future trigger and workflow-input editing UX
|
package/docs/workflow/samples.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
curl -X POST "http://localhost:3000/api/workflow-definition/by-key/sample-workflow-builder-smoke-test/execute" \
|
|
2
|
-
-H "Content-Type: application/json" \
|
|
3
|
-
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInVzZXJuYW1lIjoic2EiLCJlbWFpbCI6InNhQHNvbGlkeGFpLmNvbSIsInJvbGVzIjpbIkFkbWluIiwiSW50ZXJuYWwgVXNlciJdLCJpYXQiOjE3ODM2MTk0NzgsImV4cCI6MTc4MzcwNTg3OCwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDozMDAwIiwiaXNzIjoid29ya2Zsb3ctbWFuYWdlbWVudCJ9.58AqoXRkJkCE_U2nJVdhSrz_m-PrG47EnVOYpp3VGMY" \
|
|
4
|
-
-d '{
|
|
5
|
-
"triggerType": "manual",
|
|
6
|
-
"input": {
|
|
7
|
-
"name": "Harish",
|
|
8
|
-
"runHttp": true,
|
|
9
|
-
"url": "https://solidxai.com",
|
|
10
|
-
"items": ["alpha", "beta", "gamma"]
|
|
11
|
-
}
|
|
12
|
-
}'
|
|
13
|
-
|
|
14
|
-
curl -X POST "http://localhost:3000/api/workflow-definition/by-key/sample-workflow-builder-smoke-test/execute" \
|
|
15
|
-
-H "Content-Type: application/json" \
|
|
16
|
-
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInVzZXJuYW1lIjoic2EiLCJlbWFpbCI6InNhQHNvbGlkeGFpLmNvbSIsInJvbGVzIjpbIkFkbWluIiwiSW50ZXJuYWwgVXNlciJdLCJpYXQiOjE3ODM2MTk0NzgsImV4cCI6MTc4MzcwNTg3OCwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDozMDAwIiwiaXNzIjoid29ya2Zsb3ctbWFuYWdlbWVudCJ9.58AqoXRkJkCE_U2nJVdhSrz_m-PrG47EnVOYpp3VGMY" \
|
|
17
|
-
-d '{
|
|
18
|
-
"triggerType": "manual",
|
|
19
|
-
"input": {
|
|
20
|
-
"name": "Bhoomi",
|
|
21
|
-
"runHttp": true,
|
|
22
|
-
"url": "https://solidxai.com",
|
|
23
|
-
"items": ["item 1", "item 2", "item 3"]
|
|
24
|
-
}
|
|
25
|
-
}'
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# What Is Kestra
|
|
2
|
-
|
|
3
|
-
This note summarizes the Kestra Academy introduction lessons you shared so we have a common baseline before defining the workflow-management module for SolidX.
|
|
4
|
-
|
|
5
|
-
## Summary
|
|
6
|
-
|
|
7
|
-
Kestra presents workflow orchestration using the metaphor of an orchestra conductor. In the same way a conductor coordinates many musicians, a workflow orchestrator coordinates many systems, tools, and steps so work happens in the right order and at the right time.
|
|
8
|
-
|
|
9
|
-
At a practical level, workflow orchestration is about:
|
|
10
|
-
|
|
11
|
-
- Running multi-step processes in the correct sequence
|
|
12
|
-
- Handling failures and retries in a controlled way
|
|
13
|
-
- Triggering work from schedules or events
|
|
14
|
-
- Giving operators visibility into execution progress and problems
|
|
15
|
-
|
|
16
|
-
Kestra positions itself as an open-source orchestration platform that can support everything from small automations to large distributed pipelines. Its core framing is flexibility:
|
|
17
|
-
|
|
18
|
-
- Workflows can be authored as code
|
|
19
|
-
- Workflows can also be built visually
|
|
20
|
-
- The platform is API-first and event-driven
|
|
21
|
-
- It is language-agnostic, so each step can use the most suitable runtime
|
|
22
|
-
- It is integration-heavy, with a broad plugin ecosystem for external systems
|
|
23
|
-
|
|
24
|
-
The main idea is that Kestra is not limited to a single narrow use case. It is meant to be a general orchestration foundation for workflows that span systems, teams, and execution environments.
|
|
25
|
-
|
|
26
|
-
## Key Characteristics Of Kestra
|
|
27
|
-
|
|
28
|
-
### 1. Orchestration, not just scripting
|
|
29
|
-
|
|
30
|
-
Kestra is not simply about writing a script with several commands. The orchestration layer is responsible for sequencing, triggering, error handling, observability, and operational control.
|
|
31
|
-
|
|
32
|
-
### 2. Multiple authoring modes
|
|
33
|
-
|
|
34
|
-
Kestra supports code-first and visual/no-code workflow creation. That is important for adoption because different users prefer different levels of abstraction.
|
|
35
|
-
|
|
36
|
-
### 3. Event-driven and API-first
|
|
37
|
-
|
|
38
|
-
This suggests workflows are not only scheduled jobs. They can also react to external events and be controlled programmatically.
|
|
39
|
-
|
|
40
|
-
### 4. Language-agnostic execution
|
|
41
|
-
|
|
42
|
-
A workflow step should not be tightly coupled to one programming language or runtime. The platform should coordinate heterogeneous tasks rather than force everything into a single stack.
|
|
43
|
-
|
|
44
|
-
### 5. Integration as a first-class concern
|
|
45
|
-
|
|
46
|
-
Kestra emphasizes connecting to databases, cloud services, APIs, storage, messaging systems, and operational tools. That means orchestration value comes from connecting existing systems reliably, not from replacing them.
|
|
47
|
-
|
|
48
|
-
## Use Cases
|
|
49
|
-
|
|
50
|
-
The linked Academy use-cases lesson is mostly a visual overview, but its message is clear: Kestra is intended to support a broad range of workflow patterns rather than one single domain.
|
|
51
|
-
|
|
52
|
-
Reasonable use-case categories implied by the introduction are:
|
|
53
|
-
|
|
54
|
-
- Data movement and transformation pipelines
|
|
55
|
-
- Scheduled operational jobs and batch processing
|
|
56
|
-
- API and system-to-system orchestration
|
|
57
|
-
- Notifications, alerts, and downstream actions
|
|
58
|
-
- Business process automation with dependent steps
|
|
59
|
-
|
|
60
|
-
## What This Means For Our SolidX Module
|
|
61
|
-
|
|
62
|
-
If we are building a reusable workflow-management module inspired by Kestra, this summary suggests a few important design principles:
|
|
63
|
-
|
|
64
|
-
- We should treat workflow definition and workflow execution as separate but connected concerns.
|
|
65
|
-
- We should support both technical and less-technical authoring experiences over time.
|
|
66
|
-
- Triggers, retries, failure handling, and execution visibility should be part of the module’s foundation, not afterthoughts.
|
|
67
|
-
- The module should orchestrate external systems cleanly instead of assuming all logic lives inside one runtime.
|
|
68
|
-
- Reusability will depend on a strong plugin/action model and clean metadata boundaries.
|
|
69
|
-
|
|
70
|
-
## Sources
|
|
71
|
-
|
|
72
|
-
- [What is Workflow Orchestration?](https://academy.kestra.io/p/courses/kestra-fundamentals/3492611-introduction/11404069-what-is-workflow-orchestration)
|
|
73
|
-
- [What is Kestra?](https://academy.kestra.io/p/courses/kestra-fundamentals/3492611-introduction/11404080-what-is-kestra)
|
|
74
|
-
- [Use Cases](https://academy.kestra.io/p/courses/kestra-fundamentals/3492611-introduction/11404082-use-cases)
|
|
75
|
-
|
|
76
|
-
## Notes
|
|
77
|
-
|
|
78
|
-
- The first two lessons contained direct explanatory text.
|
|
79
|
-
- The use-cases lesson was mostly image-based in the retrieved page, so the use-case categories above are a light inference from the lesson framing plus the surrounding Kestra introduction context.
|