Commit 88c6785
authored
added nested steps and several other features (#2)
Core Features
Nested Steps
Steps can now create child steps with proper parent-child tracking. Child steps inherit abort signals from their parent. If a parent completes with
unawaited children, Duron throws an UnhandledChildStepsError to prevent orphaned processes.
Time Travel
Jobs can be restarted from a specific step, preserving completed sibling branches. Includes time offset adjustment so preserved steps align with the current
timeline. Supports parallel step marking so independent branches are preserved during time travel.
Reusable Step Definitions
New createStep() + ctx.run() API for defining modular, reusable steps. Step definitions can be composed — nested definitions can call other definitions.
Inline steps can also call reusable definitions.
Telemetry & Observability
- Built-in OpenTelemetry tracing with telemetry: { local: true } (stores spans in DB) or external exporters.
- ctx.telemetry context for recording custom metrics, creating spans, and adding attributes/events.
- Tracer is context-aware — child spans automatically link to the current trace hierarchy.
- Spans API endpoints for jobs and steps, with recursive descendant span querying.
- Batch metric insertion with configurable flushDelayMs.
Enhanced Error Handling
- New error codes for better programmatic error detection (isTimeoutError, isCancelError).
- ErrorMetadata interface with job ID and contextual info on errors.
- Proper abort and settle of running steps when errors occur.
Typed Job Results
waitForJob and runActionAndWait now return structured JobResult / TypedJobResult with proper type safety instead of raw job objects.
Dynamic Job Descriptions
Actions can define a description function to generate contextual descriptions at job creation time. Jobs are filterable by description in the API and
dashboard.
Concurrency Step Limit
New concurrencyStepLimit option on job creation for fine-grained control over how many steps can run concurrently within a single job.
Dynamic Step Names
Step names can be generated dynamically using full context (input, variables, jobId, parentStepId) via the StepNameContext interface.
---
Dashboard
- Resizable panels — drag-to-resize layout for jobs, details, and steps sections using react-resizable-panels.
- Timeline view — integrated directly into StepList with toggle between list/timeline views.
- Nested step visualization — color-coded nesting depth indicators.
- Column resizing & visibility — customizable jobs table columns with pinning support.
- Monaco JSON viewer — replaced @uiw/react-json-view with @monaco-editor/react for interactive JSON viewing.
- Spans visualization — view OpenTelemetry spans with JSONata filtering for advanced queries.
- Duration display — formatted durations (hh:mm:ss.mmm) on jobs and steps.
- Theme improvements — configurable theme prop (light/dark/system) with localStorage persistence.
- Configurable polling — PollingProvider for custom polling intervals.
- Custom fetch — ApiProvider accepts a custom fetch function.
- Description filtering — search/filter jobs by description.1 parent c772d70 commit 88c6785
92 files changed
Lines changed: 12814 additions & 1447 deletions
File tree
- packages
- assets
- docs
- content/docs
- src/styles
- duron-dashboard
- src
- components
- data-table
- ui
- contexts
- hooks
- lib
- styles
- types
- views
- duron
- migrations/postgres/20260121160012_normal_bloodstrike
- src
- adapters
- postgres
- telemetry
- test
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
| |||
85 | 87 | | |
86 | 88 | | |
87 | 89 | | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
88 | 94 | | |
89 | 95 | | |
90 | 96 | | |
| |||
93 | 99 | | |
94 | 100 | | |
95 | 101 | | |
| 102 | + | |
96 | 103 | | |
97 | 104 | | |
98 | 105 | | |
| |||
198 | 205 | | |
199 | 206 | | |
200 | 207 | | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
201 | 251 | | |
202 | 252 | | |
203 | 253 | | |
| |||
228 | 278 | | |
229 | 279 | | |
230 | 280 | | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
231 | 350 | | |
232 | 351 | | |
233 | 352 | | |
| |||
340 | 459 | | |
341 | 460 | | |
342 | 461 | | |
| 462 | + | |
| 463 | + | |
343 | 464 | | |
344 | 465 | | |
345 | 466 | | |
| |||
368 | 489 | | |
369 | 490 | | |
370 | 491 | | |
| 492 | + | |
371 | 493 | | |
372 | 494 | | |
373 | 495 | | |
374 | 496 | | |
375 | | - | |
| 497 | + | |
376 | 498 | | |
| 499 | + | |
377 | 500 | | |
378 | 501 | | |
379 | 502 | | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
380 | 508 | | |
381 | 509 | | |
382 | 510 | | |
| |||
395 | 523 | | |
396 | 524 | | |
397 | 525 | | |
| 526 | + | |
| 527 | + | |
0 commit comments