@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.
Files changed (162) hide show
  1. package/.claude/settings.local.json +16 -0
  2. package/CLAUDE.md +26 -0
  3. package/dist/commands/seed.command.d.ts.map +1 -1
  4. package/dist/commands/seed.command.js +15 -2
  5. package/dist/commands/seed.command.js.map +1 -1
  6. package/dist/constants/media-file-types.d.ts +5 -0
  7. package/dist/constants/media-file-types.d.ts.map +1 -0
  8. package/dist/constants/media-file-types.js +27 -0
  9. package/dist/constants/media-file-types.js.map +1 -0
  10. package/dist/controllers/media.controller.d.ts +14 -11
  11. package/dist/controllers/media.controller.d.ts.map +1 -1
  12. package/dist/controllers/media.controller.js +72 -33
  13. package/dist/controllers/media.controller.js.map +1 -1
  14. package/dist/dtos/create-media.dto.d.ts +1 -0
  15. package/dist/dtos/create-media.dto.d.ts.map +1 -1
  16. package/dist/dtos/create-media.dto.js +7 -1
  17. package/dist/dtos/create-media.dto.js.map +1 -1
  18. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  19. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-role-metadata.dto.js +3 -1
  21. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  22. package/dist/dtos/update-media.dto.d.ts +1 -0
  23. package/dist/dtos/update-media.dto.d.ts.map +1 -1
  24. package/dist/dtos/update-media.dto.js +7 -1
  25. package/dist/dtos/update-media.dto.js.map +1 -1
  26. package/dist/entities/media.entity.d.ts +1 -0
  27. package/dist/entities/media.entity.d.ts.map +1 -1
  28. package/dist/entities/media.entity.js +9 -1
  29. package/dist/entities/media.entity.js.map +1 -1
  30. package/dist/enums/auth-type.enum.d.ts +2 -1
  31. package/dist/enums/auth-type.enum.d.ts.map +1 -1
  32. package/dist/enums/auth-type.enum.js +1 -0
  33. package/dist/enums/auth-type.enum.js.map +1 -1
  34. package/dist/guards/authentication.guard.d.ts +3 -1
  35. package/dist/guards/authentication.guard.d.ts.map +1 -1
  36. package/dist/guards/authentication.guard.js +5 -1
  37. package/dist/guards/authentication.guard.js.map +1 -1
  38. package/dist/guards/media-signed-url.guard.d.ts +9 -0
  39. package/dist/guards/media-signed-url.guard.d.ts.map +1 -0
  40. package/dist/guards/media-signed-url.guard.js +49 -0
  41. package/dist/guards/media-signed-url.guard.js.map +1 -0
  42. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  43. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +10 -13
  44. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  45. package/dist/interfaces.d.ts +19 -1
  46. package/dist/interfaces.d.ts.map +1 -1
  47. package/dist/interfaces.js +2 -0
  48. package/dist/interfaces.js.map +1 -1
  49. package/dist/repository/media.repository.d.ts.map +1 -1
  50. package/dist/repository/media.repository.js +2 -0
  51. package/dist/repository/media.repository.js.map +1 -1
  52. package/dist/seeders/module-metadata-seeder.service.d.ts +7 -1
  53. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  54. package/dist/seeders/module-metadata-seeder.service.js +87 -3
  55. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  56. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -0
  57. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  58. package/dist/seeders/permission-metadata-seeder.service.js +6 -1
  59. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  60. package/dist/seeders/seed-data/solid-core-metadata.json +114 -13
  61. package/dist/services/authentication.service.d.ts +1 -0
  62. package/dist/services/authentication.service.d.ts.map +1 -1
  63. package/dist/services/authentication.service.js +19 -1
  64. package/dist/services/authentication.service.js.map +1 -1
  65. package/dist/services/media-download-url.service.d.ts +21 -0
  66. package/dist/services/media-download-url.service.d.ts.map +1 -0
  67. package/dist/services/media-download-url.service.js +67 -0
  68. package/dist/services/media-download-url.service.js.map +1 -0
  69. package/dist/services/media-storage.utils.d.ts +27 -0
  70. package/dist/services/media-storage.utils.d.ts.map +1 -0
  71. package/dist/services/media-storage.utils.js +82 -0
  72. package/dist/services/media-storage.utils.js.map +1 -0
  73. package/dist/services/media.service.d.ts +20 -4
  74. package/dist/services/media.service.d.ts.map +1 -1
  75. package/dist/services/media.service.js +157 -55
  76. package/dist/services/media.service.js.map +1 -1
  77. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +4 -4
  78. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  79. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +37 -63
  80. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  81. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +5 -5
  82. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  83. package/dist/services/mediaStorageProviders/file-storage-provider.js +37 -38
  84. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  85. package/dist/services/role-metadata.service.d.ts +1 -0
  86. package/dist/services/role-metadata.service.d.ts.map +1 -1
  87. package/dist/services/role-metadata.service.js +8 -5
  88. package/dist/services/role-metadata.service.js.map +1 -1
  89. package/dist/solid-core.module.d.ts.map +1 -1
  90. package/dist/solid-core.module.js +11 -1
  91. package/dist/solid-core.module.js.map +1 -1
  92. package/dist/subscribers/audit.subscriber.js +1 -1
  93. package/dist/subscribers/audit.subscriber.js.map +1 -1
  94. package/package.json +1 -1
  95. package/src/commands/seed.command.ts +17 -3
  96. package/src/constants/media-file-types.ts +44 -0
  97. package/src/controllers/media.controller.ts +44 -24
  98. package/src/dtos/create-media.dto.ts +8 -3
  99. package/src/dtos/create-role-metadata.dto.ts +2 -0
  100. package/src/dtos/update-media.dto.ts +8 -3
  101. package/src/entities/media.entity.ts +4 -1
  102. package/src/enums/auth-type.enum.ts +1 -0
  103. package/src/guards/authentication.guard.ts +3 -0
  104. package/src/guards/media-signed-url.guard.ts +41 -0
  105. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +12 -24
  106. package/src/interfaces.ts +20 -0
  107. package/src/repository/media.repository.ts +2 -0
  108. package/src/seeders/module-metadata-seeder.service.ts +109 -3
  109. package/src/seeders/permission-metadata-seeder.service.ts +6 -1
  110. package/src/seeders/seed-data/solid-core-metadata.json +114 -13
  111. package/src/services/1.js +6 -0
  112. package/src/services/authentication.service.ts +24 -1
  113. package/src/services/media-download-url.service.ts +67 -0
  114. package/src/services/media-storage.utils.ts +79 -0
  115. package/src/services/media.service.ts +189 -59
  116. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +52 -76
  117. package/src/services/mediaStorageProviders/file-storage-provider.ts +44 -48
  118. package/src/services/role-metadata.service.ts +17 -5
  119. package/src/solid-core.module.ts +21 -2
  120. package/src/subscribers/audit.subscriber.ts +1 -1
  121. package/dist-tests/api/authenticate.spec.js +0 -119
  122. package/dist-tests/api/authenticate.spec.js.map +0 -1
  123. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  124. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  125. package/dist-tests/api/ping.spec.js +0 -21
  126. package/dist-tests/api/ping.spec.js.map +0 -1
  127. package/dist-tests/helpers/auth.js +0 -41
  128. package/dist-tests/helpers/auth.js.map +0 -1
  129. package/dist-tests/helpers/env.js +0 -11
  130. package/dist-tests/helpers/env.js.map +0 -1
  131. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +0 -136
  132. package/docs/agent-builder/team-ready-note-agent-builder.md +0 -305
  133. package/docs/agent-hub-grooming.md +0 -301
  134. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
  135. package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
  136. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
  137. package/docs/datasource-introspection-ddl-analysis.md +0 -326
  138. package/docs/datasource-introspection-implementation-plan.md +0 -306
  139. package/docs/grouping-enhancements.md +0 -89
  140. package/docs/java-spring/README.md +0 -3
  141. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  142. package/docs/module-package-import-handoff.md +0 -691
  143. package/docs/seed-changes.md +0 -65
  144. package/docs/test-data-workflow.md +0 -200
  145. package/docs/type-declaration-import-issue.md +0 -24
  146. package/docs/workflow/business-automation-example-notes.md +0 -309
  147. package/docs/workflow/data-engineering-pipeline-example-notes.md +0 -330
  148. package/docs/workflow/foreach-example-notes.md +0 -187
  149. package/docs/workflow/hello-world-example-notes.md +0 -271
  150. package/docs/workflow/kestra-concepts-plugins-blueprints.md +0 -315
  151. package/docs/workflow/loop-until-example-notes.md +0 -198
  152. package/docs/workflow/microservices-and-apis-example-notes.md +0 -264
  153. package/docs/workflow/samples.md +0 -25
  154. package/docs/workflow/what-is-kestra.md +0 -79
  155. package/docs/workflow/workflow-core-module-handoff-summary.md +0 -191
  156. package/docs/workflow/workflow-module-brd.md +0 -185
  157. package/docs/workflow/workflow-module-domain-model.md +0 -252
  158. package/docs/workflow/workflow-module-metadata-dsl.md +0 -302
  159. package/docs/workflow/workflow-module-technical-spec.md +0 -293
  160. package/docs/workflow/workflow-node-type-contracts.md +0 -635
  161. package/docs/workflow/workflow-node-ui-metadata-contract.md +0 -1262
  162. package/docs/workflow/workflow-solidx-model-field-spec.md +0 -284
@@ -1,65 +0,0 @@
1
- # Seeding Enhancements Summary
2
-
3
- ## Overview
4
- This document summarizes the changes made to seeding behavior in `solid-core`:
5
- - Metadata pruning support across targets.
6
- - CLI flags for selective modules and pruning.
7
-
8
- ## Pruning Support
9
- Pruning is now available for most metadata targets. When enabled, records present in the DB but missing from JSON are removed. This is done in two phases:
10
- 1. Identify records in DB not present in JSON.
11
- 2. Delete those records before normal upsert seeding.
12
-
13
- ### Targets with Pruning
14
- - Module models + fields (with model-level pruning).
15
- - Views, actions, menus (with join cleanup).
16
- - Security rules, list of values, dashboards.
17
- - Scheduled jobs, saved filters, model sequences.
18
- - Permissions (also clears role-permission join table).
19
-
20
- ### Targets WITHOUT Pruning (conservative)
21
- - Module metadata itself
22
- - Media storage providers
23
- - Roles
24
- - Users
25
- - Email templates
26
- - SMS templates
27
- - System fields (global)
28
- - Default settings (global)
29
-
30
- ### Pruning Mode
31
- Pruning runs **only** when `--prune` is provided. If omitted, pruning is skipped.
32
-
33
- ## CLI Changes
34
- ### Modules to Seed
35
- `--conf` was removed. Use:
36
- ```
37
- --modules-to-seed venue,reports
38
- ```
39
- This passes `modulesToSeed` to the seeder as an array.
40
-
41
- ## Sample Commands
42
- ### Default seeding
43
- ```
44
- npx @solidxai/solidctl seed
45
- ```
46
-
47
- ### Select modules only
48
- ```
49
- npx @solidxai/solidctl seed --modules-to-seed venue,reports
50
- ```
51
-
52
- ### Pruning enabled
53
- ```
54
- npx @solidxai/solidctl seed --modules-to-seed venue --prune
55
- ```
56
-
57
- ### Pruning enabled (all modules)
58
- ```
59
- npx @solidxai/solidctl seed --prune
60
- ```
61
-
62
- ## Files Touched (Key)
63
- - `src/seeders/module-metadata-seeder.service.ts`
64
- - `src/commands/seed.command.ts`
65
- - `src/repository/solid-base.repository.ts` (added `findOneByUserKey`)
@@ -1,200 +0,0 @@
1
- # Test Data Workflow
2
-
3
- This document describes the end-to-end workflow for creating isolated test databases, seeding metadata, loading test data, and tearing everything down.
4
-
5
- ## Overview
6
- The workflow is designed to:
7
- - Create one **test database per configured datasource** in the project.
8
- - Point the app to those new databases via `.env` updates.
9
- - Seed all metadata into the fresh databases.
10
- - Load model-specific `testData` entries from module metadata JSON files.
11
- - Cleanly reverse everything at the end.
12
-
13
- The commands below are the canonical flow.
14
-
15
- ---
16
-
17
- ## Step 1: Create test datasources
18
-
19
- Command:
20
- ```
21
- npx @solidxai/solidctl test data --setup
22
- ```
23
-
24
- What this does:
25
- - Reads all configured datasources from the Solid registry (`SolidRegistry.getSolidDatabaseModules()`), and uses their `name()` values.
26
- - Generates a unique **run name** (two words, underscore-separated, e.g. `steady_wolf`).
27
- - Builds a **timestamped database name** per datasource:
28
- - `<datasource>_<timestamp>_<runName>`
29
- - Backs up the current `.env` into `.env.backup.<runName>`.
30
- - Rewrites `.env` in-place with new `*_DATABASE_NAME` values.
31
- - Creates the databases/schemas using TypeORM and the configured connection info.
32
- - Writes a `.solidx-test-manifest` with the run name + database names so the teardown can reverse everything later.
33
-
34
- Example output:
35
- ```
36
- ▶ Running solid test data
37
- Creating test datasource environment file and manifest.
38
- Backed up .env to .env.backup.steady_wolf and applied new test datasource names to .env.
39
- Creating test database/schema "default_20260201234402_steady_wolf" on datasource "default"...
40
-
41
- ============================================================
42
- TEST DATASOURCE ENVIRONMENT CREATED
43
- ------------------------------------------------------------
44
- Run name : steady_wolf
45
- Env backup : .env.backup.steady_wolf
46
-
47
- Test databases/schemas created:
48
- - default: default_20260201234402_steady_wolf
49
-
50
- Next steps:
51
- 1) Using updated .env with test datasource names
52
- 2) Run solid seed as usual
53
- 3) Proceed with loading the test data for each module
54
- 4) Run the test cases
55
- 5) Tear down
56
- ============================================================
57
-
58
- ✔ solid test data completed
59
- ```
60
-
61
- Rationale:
62
- - The `.env` rewrite guarantees the app connects to fresh databases without changing code.
63
- - The manifest records the run so deletion is safe and deterministic.
64
-
65
- ---
66
-
67
- ## Step 2: Seed metadata into the new databases
68
-
69
- Command:
70
- ```
71
- npx @solidxai/solidctl seed
72
- ```
73
-
74
- What this does:
75
- - Seeds full module metadata into the **fresh test databases**.
76
- - Generates the `sa` user if needed and prints its password.
77
- - Ensures all models, fields, roles, permissions, views, actions, etc. exist before loading test data.
78
-
79
- Example output (truncated):
80
- ```
81
- ▶ Running solid seed
82
- ▶ Pruning disabled: existing metadata will be kept.
83
- ▶ No modulesToSeed provided. Seeding ALL modules.
84
- ▶ Seeding Metadata for Module: solid-core
85
- ✔ [solid-core] Module/Model/Fields seeded (upserted 376)
86
- ...
87
- ✔ Seeding completed.
88
- ✔ solid seed completed
89
- ```
90
-
91
- Rationale:
92
- - Test data relies on model metadata and relationships; this ensures the schema and reference data are ready.
93
-
94
- ---
95
-
96
- ## Step 3: Load test data
97
-
98
- Command:
99
- ```
100
- npx @solidxai/solidctl test data --load
101
- ```
102
-
103
- What this does:
104
- - Reads all module metadata files (or a subset if `--modules-to-test` is provided).
105
- - Looks for `testData` arrays in each metadata file.
106
- - Resolves the correct repository for each model (repository name pattern: `<ModelName>Repository`).
107
- - Performs **upsert-style** inserts using the model’s `userKeyFieldUserKey`.
108
- - Resolves many-to-one relations using `${fieldName}UserKey`.
109
-
110
- Example output:
111
- ```
112
- ▶ Running solid test data
113
- Test data setup for all modules.
114
- Processing test data for module: solid-core
115
- ✔ Test data setup complete for module: solid-core
116
- Processing test data for module: venue
117
- ✔ Test data setup complete for module: venue
118
- ✔ solid test data completed
119
- ```
120
-
121
- Rationale:
122
- - This keeps test fixtures human-readable and tied to module metadata.
123
-
124
- ---
125
-
126
-
127
- ## Step 4: Run Tests
128
- ```
129
- npx @solidxai/solidctl test run --module venue --api-base-url http://localhost:3000 --ui-base-url http://localhost:5173 --headless false
130
- ```
131
-
132
- ```
133
- npx @solidxai/solidctl test run --module venue --list-specs
134
- ```
135
-
136
- What this does:
137
- - Loads `testing.scenarios` from the module metadata file.
138
- - Applies `--scenario-ids` or `--include-tags` filtering if provided.
139
- - Boots API and UI adapters with the supplied base URLs.
140
- - Registers any custom test specs listed in `testing.specs`.
141
- - Executes scenarios in order with fail‑fast behavior.
142
-
143
- Useful variants:
144
- ```
145
- npx @solidxai/solidctl test run --module venue --scenario-ids api-authenticate-success,api-create-states
146
- ```
147
-
148
- ```
149
- npx @solidxai/solidctl test run --module venue --include-tags smoke
150
- ```
151
-
152
- ```
153
- npx @solidxai/solidctl test run --module venue --api-base-url http://localhost:3000 --headless true
154
- ```
155
-
156
- ```
157
- npx @solidxai/solidctl test run --module venue --headless false
158
- ```
159
-
160
- Notes:
161
- - If your scenario depends on a previous scenario’s `saveAs` output (e.g., `loginSuccess`), ensure the auth scenario runs first.
162
- - For UI tests, `--ui-base-url` should point to a running frontend server.
163
- - `--list-specs` prints registered custom `test.spec` ids and exits.
164
-
165
-
166
- ## Step 5: Tear everything down
167
-
168
- Command:
169
- ```
170
- npx @solidxai/solidctl test data --teardown
171
- ```
172
-
173
- What this does:
174
- - Restores `.env` from the latest `.env.backup.<runName>`.
175
- - Deletes all `.env.backup.<runName>` files created by the workflow.
176
- - Drops each test database/schema recorded in `.solidx-test-manifest`.
177
- - Deletes the manifest file.
178
-
179
- Example output:
180
- ```
181
- ▶ Running solid test data
182
- Deleting test datasource environment and databases.
183
- Dropping test database/schema "default_20260201234402_steady_wolf" on datasource "default"...
184
- ✔ Test datasource env files and manifest deleted; test databases dropped.
185
- ✔ solid test data completed
186
- ```
187
-
188
- Rationale:
189
- - Keeps the local environment clean and restores the original `.env` safely.
190
-
191
- ---
192
-
193
- ## Optional: Limit modules for test data load
194
-
195
- You can restrict test data loading to a subset of modules:
196
- ```
197
- npx @solidxai/solidctl test data --load --modules-to-test venue,reports
198
- ```
199
-
200
- Only the listed modules are processed.
@@ -1,24 +0,0 @@
1
- # Issue: Consumer sees `Property 'id' does not exist on type 'VenueUser'`
2
-
3
- ## Summary
4
- The published declaration files in `dist/` import internal types using `src/...` module specifiers. In a consuming project, TypeScript resolves those imports against the consumer's `src` path (or fails), which can cause `User` to extend a different `CommonEntity` that does not define `id`. This leads to `Property 'id' does not exist on type 'VenueUser'` even though `CommonEntity` in the library defines it.
5
-
6
- ## Evidence
7
- - `dist/entities/user.entity.d.ts` starts with:
8
- - `import { CommonEntity } from "src/entities/common.entity";`
9
- - `dist/entities/common.entity.d.ts` correctly contains:
10
- - `id: number;`
11
-
12
- Because the import is `src/...`, the consumer may resolve it to their own `src` tree instead of the library's `dist` types.
13
-
14
- ## Root Cause
15
- Library declarations are not portable because internal imports are using absolute `src/...` aliases. These aliases are not part of Node module resolution, so consumers resolve them differently.
16
-
17
- ## Fix Options
18
- 1. **Preferred:** Replace internal imports in `src/` with relative paths so emitted `.d.ts` files are portable.
19
- 2. **Alternative:** Keep `src/*` aliases but add a post-build step (e.g., `tsc-alias`) to rewrite `dist/**/*.d.ts` imports to relative paths.
20
-
21
- ## Next Steps
22
- - Decide on option 1 or 2.
23
- - Rebuild and verify `dist/**/*.d.ts` no longer import from `src/...`.
24
- - Publish a new package version and ensure the consuming app resolves `User` and `CommonEntity` from the same package instance.
@@ -1,309 +0,0 @@
1
- # Business Automation Example Notes
2
-
3
- ## Purpose
4
-
5
- This document captures a second reference workflow and the related UI observations from the accompanying screens. It builds on the earlier data-engineering example, but adds an important extra dimension: how the documentation panel should look and behave when a node is selected.
6
-
7
- ---
8
-
9
- ## Example Workflow YAML
10
-
11
- ```yaml
12
- id: business-automation
13
- namespace: tutorial
14
- labels:
15
- name: Business Automation
16
-
17
- tasks:
18
- - id: working_directory
19
- type: io.kestra.plugin.core.flow.WorkingDirectory
20
- description: Provide a clean working directory for downstream tasks.
21
- tasks:
22
- - id: query
23
- type: io.kestra.plugin.jdbc.sqlite.Queries
24
- description: Create and populate the SQLite features table, then return the rows.
25
- url: jdbc:sqlite:kestra.db
26
- fetchType: STORE
27
- sql: |
28
- CREATE TABLE IF NOT EXISTS features (
29
- id INTEGER PRIMARY KEY,
30
- name TEXT NOT NULL,
31
- description TEXT NOT NULL,
32
- release_version TEXT NOT NULL,
33
- edition TEXT NOT NULL
34
- );
35
-
36
- DELETE FROM features;
37
-
38
- INSERT INTO features (name, description, release_version, edition)
39
- VALUES
40
- ('Worker Groups', 'Allows targeting specific tasks or triggers to run on specific remote workers for better scalability and resource management.', '0.10', 'Enterprise'),
41
- ('Realtime Triggers', 'Supports triggering event-driven workflows in real-time.', '0.17', 'Open-Source'),
42
- ('Task Runners', 'Provides on-demand remote execution environments for running tasks.', '0.16', 'Open-Source'),
43
- ('KV Store', 'Adds key-value storage for persisting data across workflow executions.', '0.18', 'Open-Source'),
44
- ('SCIM Directory Sync', 'Allows synchronization of users and groups from Identity Providers.', '0.18', 'Enterprise');
45
-
46
- SELECT * FROM features
47
- ORDER BY release_version;
48
-
49
- - id: to_csv
50
- type: io.kestra.plugin.serdes.csv.IonToCsv
51
- description: Convert the query results to a CSV file.
52
- from: "{{ outputs.query.outputs[0].uri }}"
53
-
54
- - id: to_excel
55
- type: io.kestra.plugin.serdes.excel.IonToExcel
56
- description: Convert the query results to an Excel file.
57
- from: "{{ outputs.query.outputs[0].uri }}"
58
-
59
- description: |
60
- **Use case:** Business automation that assembles product feature data and exports it for sharing.
61
- **Highlights:**
62
- - Prepare a clean working directory, then build and populate a SQLite table of Kestra features.
63
- - Return the ordered feature list as query results for inspection.
64
- - Convert the dataset to both CSV and Excel so stakeholders can consume it in their preferred format.
65
- ```
66
-
67
- ---
68
-
69
- ## What This Example Adds
70
-
71
- This example is especially useful because it covers:
72
-
73
- - nested workflow structure via `WorkingDirectory`
74
- - a container / parent node with child tasks
75
- - export-oriented downstream tasks
76
- - a stronger documentation-panel reference
77
- - a topology that is more interesting than a flat linear task list
78
-
79
- The high-level shape is:
80
-
81
- ```text
82
- Start
83
- |
84
- v
85
- working_directory
86
- |
87
- v
88
- query
89
- |
90
- v
91
- to_csv
92
- |
93
- v
94
- to_excel
95
- |
96
- v
97
- End
98
- ```
99
-
100
- Conceptually, this also shows that the flow model needs to support grouped or scoped task containers:
101
-
102
- ```text
103
- Workflow
104
- └── working_directory
105
- ├── query
106
- ├── to_csv
107
- └── to_excel
108
- ```
109
-
110
- ---
111
-
112
- ## Repeated Notes From The Earlier Example
113
-
114
- The same broader detail-page guidance still applies here:
115
-
116
- - detail page is tab-oriented
117
- - `Topology` is read-only
118
- - `Executions` is a list
119
- - `Edit` is the primary authoring area
120
- - `Flow` and `Code` are the primary edit surfaces
121
- - `Docs` should be contextual and secondary to the main editing layout
122
- - `Triggers`, `Logs`, and `Metrics` remain valid long-term tabs
123
- - `Revisions`, `Concurrency`, and `Audit Logs` are lower priority for now
124
-
125
- ---
126
-
127
- ## New Documentation Panel Notes
128
-
129
- This example adds much better clarity on how the documentation panel should behave.
130
-
131
- ### Documentation Context
132
-
133
- The documentation shown is for the selected node type, not for the workflow as a whole.
134
-
135
- In the reference:
136
-
137
- - the selected node is `query`
138
- - the docs panel shows plugin documentation for `io.kestra.plugin.jdbc.sqlite.Queries`
139
- - the panel is contextual to the current node type
140
-
141
- So for SolidX:
142
-
143
- - docs should track the selected node type
144
- - when a node is selected in flow or code, the docs side panel should update accordingly
145
- - workflow-level documentation can exist separately, but node-type docs are the default contextual behavior in the editor
146
-
147
- ---
148
-
149
- ## Documentation Panel Structure
150
-
151
- The documentation panel in this example has a very clear internal structure:
152
-
153
- - breadcrumb / hierarchy
154
- - title
155
- - optional badge / release-notes affordance
156
- - prose description
157
- - typed code identity block
158
- - collapsible documentation sections
159
-
160
- ### Observed Sections
161
-
162
- - `Examples`
163
- - `Properties`
164
- - `Outputs`
165
- - `Metrics`
166
- - `Definitions`
167
-
168
- This aligns strongly with the node metadata contract we have already started shaping.
169
-
170
- ---
171
-
172
- ## Documentation Content Expectations
173
-
174
- This example suggests each node type should be able to expose enough metadata to render:
175
-
176
- ### Examples
177
-
178
- - one or more example snippets
179
- - copy-friendly blocks
180
- - short narrative explaining the example
181
-
182
- ### Properties
183
-
184
- - field names
185
- - required vs optional indication
186
- - type badges
187
- - support for union-ish displays like `Integer | String`
188
- - support for object / array / boolean / string / numeric property shapes
189
-
190
- ### Outputs
191
-
192
- - named outputs
193
- - output type
194
- - compact typed list presentation
195
-
196
- ### Metrics
197
-
198
- - available metrics exposed by the node type
199
- - metric name
200
- - metric kind such as `Counter`
201
-
202
- ### Definitions
203
-
204
- - deeper technical definitions or linked schema-level structures
205
- - collapsible advanced sections
206
-
207
- ---
208
-
209
- ## Implications For SolidX Node Metadata
210
-
211
- This example reinforces that the node-definition contract should be rich enough to drive docs directly from backend metadata.
212
-
213
- The docs panel should be primarily schema- and metadata-driven, not hardcoded per node.
214
-
215
- The ideal default path remains:
216
-
217
- - backend node metadata defines docs content
218
- - frontend renders docs generically
219
-
220
- Escape hatches remain useful for special nodes, but they should not be the main path.
221
-
222
- ---
223
-
224
- ## Topology Notes From This Example
225
-
226
- This example also adds an important topology detail:
227
-
228
- - grouped or scoped containers should be visually represented
229
- - the `working_directory` task appears as a visual parent/container around its child tasks
230
-
231
- For SolidX, this implies future flow rendering should support:
232
-
233
- - nested node groups
234
- - container boundaries
235
- - child-task layout inside a parent control/container node
236
-
237
- This does not need to be fully solved in the very first pass, but it should be considered part of the intended contract.
238
-
239
- ---
240
-
241
- ## Editor Layout Notes Confirmed Again
242
-
243
- The screenshot again supports the desired edit composition:
244
-
245
- - left: workflow code
246
- - center/right: topology / flow canvas
247
- - right-side docs panel: contextual node documentation
248
-
249
- This means the editor should feel like a multi-surface workstation rather than a single form page.
250
-
251
- ---
252
-
253
- ## Metrics Note
254
-
255
- This example visually shows `Metrics` inside the docs panel for a node type.
256
-
257
- That is different from workflow runtime metrics reporting.
258
-
259
- So there are really two meanings of metrics in the UX:
260
-
261
- ### Node Documentation Metrics
262
-
263
- - what metrics a node can emit
264
- - static metadata
265
- - safe to document now
266
-
267
- ### Workflow Runtime Metrics
268
-
269
- - actual measured emitted metric data from executions
270
- - requires persistence / backing tables / querying
271
- - later feature
272
-
273
- This distinction is important and should be preserved in our documentation and implementation.
274
-
275
- ---
276
-
277
- ## Pending Feature Notes
278
-
279
- This example highlights a few still-pending capabilities:
280
-
281
- - generic documentation side panel driven from node metadata
282
- - nested/grouped flow rendering for container nodes
283
- - runtime metrics persistence and reporting
284
- - richer definitions rendering
285
- - example snippet copy UX
286
-
287
- ---
288
-
289
- ## Screenshot References
290
-
291
- These screenshots informed the notes above:
292
-
293
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.09.09.png`
294
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.09.25.png`
295
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.09.33.png`
296
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.09.40.png`
297
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.09.47.png`
298
-
299
- ---
300
-
301
- ## Recommended Follow-On Use
302
-
303
- This example should be used as a reference for:
304
-
305
- 1. contextual node documentation rendering
306
- 2. generic docs-section UI design
307
- 3. grouped / container node visualization
308
- 4. nested workflow-structure handling in the flow canvas
309
- 5. clarifying the difference between documented metrics and persisted runtime metrics