grimoire-wizard 0.3.0

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.
@@ -0,0 +1,964 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://grimoire-wizard.dev/schema/grimoire.schema.json",
4
+ "title": "Grimoire Wizard Configuration",
5
+ "description": "Schema for Grimoire Wizard YAML/JSON configuration files",
6
+ "type": "object",
7
+ "required": ["meta", "steps"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "meta": {
11
+ "type": "object",
12
+ "description": "Metadata about the wizard",
13
+ "required": ["name"],
14
+ "additionalProperties": false,
15
+ "properties": {
16
+ "name": {
17
+ "type": "string",
18
+ "description": "Name of the wizard"
19
+ },
20
+ "version": {
21
+ "type": "string",
22
+ "description": "Version of the wizard configuration"
23
+ },
24
+ "description": {
25
+ "type": "string",
26
+ "description": "Description of what the wizard does"
27
+ }
28
+ }
29
+ },
30
+ "extends": {
31
+ "type": "string",
32
+ "description": "Path to a base wizard configuration to extend"
33
+ },
34
+ "theme": {
35
+ "type": "object",
36
+ "description": "Theme configuration for the wizard UI",
37
+ "additionalProperties": false,
38
+ "properties": {
39
+ "tokens": {
40
+ "type": "object",
41
+ "description": "Color tokens for theming",
42
+ "additionalProperties": false,
43
+ "properties": {
44
+ "primary": {
45
+ "type": "string",
46
+ "pattern": "^#[0-9a-fA-F]{6}$",
47
+ "description": "Primary color (hex format, e.g., #FF0000)"
48
+ },
49
+ "success": {
50
+ "type": "string",
51
+ "pattern": "^#[0-9a-fA-F]{6}$",
52
+ "description": "Success color (hex format)"
53
+ },
54
+ "error": {
55
+ "type": "string",
56
+ "pattern": "^#[0-9a-fA-F]{6}$",
57
+ "description": "Error color (hex format)"
58
+ },
59
+ "warning": {
60
+ "type": "string",
61
+ "pattern": "^#[0-9a-fA-F]{6}$",
62
+ "description": "Warning color (hex format)"
63
+ },
64
+ "info": {
65
+ "type": "string",
66
+ "pattern": "^#[0-9a-fA-F]{6}$",
67
+ "description": "Info color (hex format)"
68
+ },
69
+ "muted": {
70
+ "type": "string",
71
+ "pattern": "^#[0-9a-fA-F]{6}$",
72
+ "description": "Muted color (hex format)"
73
+ },
74
+ "accent": {
75
+ "type": "string",
76
+ "pattern": "^#[0-9a-fA-F]{6}$",
77
+ "description": "Accent color (hex format)"
78
+ }
79
+ }
80
+ },
81
+ "icons": {
82
+ "type": "object",
83
+ "description": "Icon characters for UI elements",
84
+ "additionalProperties": false,
85
+ "properties": {
86
+ "step": {
87
+ "type": "string",
88
+ "description": "Icon for current step"
89
+ },
90
+ "stepDone": {
91
+ "type": "string",
92
+ "description": "Icon for completed step"
93
+ },
94
+ "stepPending": {
95
+ "type": "string",
96
+ "description": "Icon for pending step"
97
+ },
98
+ "pointer": {
99
+ "type": "string",
100
+ "description": "Icon for pointer/cursor"
101
+ }
102
+ }
103
+ }
104
+ }
105
+ },
106
+ "checks": {
107
+ "type": "array",
108
+ "description": "Pre-flight checks to run before the wizard",
109
+ "items": {
110
+ "type": "object",
111
+ "required": ["name", "run", "message"],
112
+ "additionalProperties": false,
113
+ "properties": {
114
+ "name": {
115
+ "type": "string",
116
+ "description": "Name of the check"
117
+ },
118
+ "run": {
119
+ "type": "string",
120
+ "description": "Command to run for the check"
121
+ },
122
+ "message": {
123
+ "type": "string",
124
+ "description": "Message to display if check fails"
125
+ }
126
+ }
127
+ }
128
+ },
129
+ "steps": {
130
+ "type": "array",
131
+ "description": "Array of wizard steps",
132
+ "minItems": 1,
133
+ "items": {
134
+ "oneOf": [
135
+ { "$ref": "#/definitions/textStep" },
136
+ { "$ref": "#/definitions/selectStep" },
137
+ { "$ref": "#/definitions/multiselectStep" },
138
+ { "$ref": "#/definitions/confirmStep" },
139
+ { "$ref": "#/definitions/passwordStep" },
140
+ { "$ref": "#/definitions/numberStep" },
141
+ { "$ref": "#/definitions/searchStep" },
142
+ { "$ref": "#/definitions/editorStep" },
143
+ { "$ref": "#/definitions/pathStep" },
144
+ { "$ref": "#/definitions/toggleStep" },
145
+ { "$ref": "#/definitions/messageStep" }
146
+ ]
147
+ }
148
+ },
149
+ "output": {
150
+ "type": "object",
151
+ "description": "Output configuration for wizard results",
152
+ "required": ["format"],
153
+ "additionalProperties": false,
154
+ "properties": {
155
+ "format": {
156
+ "type": "string",
157
+ "enum": ["json", "env", "yaml"],
158
+ "description": "Output format for the wizard results"
159
+ },
160
+ "path": {
161
+ "type": "string",
162
+ "description": "Path where output should be written"
163
+ }
164
+ }
165
+ },
166
+ "actions": {
167
+ "type": "array",
168
+ "description": "Post-wizard actions to run after completion",
169
+ "items": {
170
+ "type": "object",
171
+ "required": ["run"],
172
+ "additionalProperties": false,
173
+ "properties": {
174
+ "name": {
175
+ "type": "string",
176
+ "description": "Display name for the action"
177
+ },
178
+ "run": {
179
+ "type": "string",
180
+ "description": "Shell command to execute. Supports {{stepId}} template interpolation."
181
+ },
182
+ "when": {
183
+ "$ref": "#/definitions/condition",
184
+ "description": "Condition that must be true for the action to run"
185
+ }
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "definitions": {
191
+ "baseStep": {
192
+ "type": "object",
193
+ "required": ["id", "type", "message"],
194
+ "properties": {
195
+ "id": {
196
+ "type": "string",
197
+ "description": "Unique identifier for this step"
198
+ },
199
+ "type": {
200
+ "type": "string",
201
+ "description": "Type of step"
202
+ },
203
+ "message": {
204
+ "type": "string",
205
+ "description": "Question or prompt message for the user"
206
+ },
207
+ "description": {
208
+ "type": "string",
209
+ "description": "Help text displayed below the prompt"
210
+ },
211
+ "next": {
212
+ "type": "string",
213
+ "description": "ID of the next step to navigate to (or '__done__' to finish)"
214
+ },
215
+ "when": {
216
+ "$ref": "#/definitions/condition",
217
+ "description": "Condition that must be true for this step to be shown"
218
+ },
219
+ "keepValuesOnPrevious": {
220
+ "type": "boolean",
221
+ "description": "Whether to keep values when navigating back"
222
+ },
223
+ "required": {
224
+ "type": "boolean",
225
+ "description": "Whether this step is required"
226
+ },
227
+ "group": {
228
+ "type": "string",
229
+ "description": "Group name for organizing steps"
230
+ }
231
+ }
232
+ },
233
+ "textStep": {
234
+ "allOf": [
235
+ { "$ref": "#/definitions/baseStep" },
236
+ {
237
+ "type": "object",
238
+ "required": ["type"],
239
+ "additionalProperties": false,
240
+ "properties": {
241
+ "id": true,
242
+ "type": {
243
+ "const": "text"
244
+ },
245
+ "message": true,
246
+ "description": true,
247
+ "next": true,
248
+ "when": true,
249
+ "keepValuesOnPrevious": true,
250
+ "required": true,
251
+ "group": true,
252
+ "placeholder": {
253
+ "type": "string",
254
+ "description": "Placeholder text for input"
255
+ },
256
+ "default": {
257
+ "type": "string",
258
+ "description": "Default value"
259
+ },
260
+ "validate": {
261
+ "type": "array",
262
+ "description": "Validation rules",
263
+ "items": {
264
+ "$ref": "#/definitions/validationRule"
265
+ }
266
+ }
267
+ }
268
+ }
269
+ ]
270
+ },
271
+ "selectStep": {
272
+ "allOf": [
273
+ { "$ref": "#/definitions/baseStep" },
274
+ {
275
+ "type": "object",
276
+ "required": ["type", "options"],
277
+ "additionalProperties": false,
278
+ "properties": {
279
+ "id": true,
280
+ "type": {
281
+ "const": "select"
282
+ },
283
+ "message": true,
284
+ "description": true,
285
+ "next": true,
286
+ "when": true,
287
+ "keepValuesOnPrevious": true,
288
+ "required": true,
289
+ "group": true,
290
+ "options": {
291
+ "type": "array",
292
+ "minItems": 1,
293
+ "description": "Array of selectable options",
294
+ "items": {
295
+ "$ref": "#/definitions/selectChoice"
296
+ }
297
+ },
298
+ "default": {
299
+ "type": "string",
300
+ "description": "Default selected option value"
301
+ },
302
+ "routes": {
303
+ "type": "object",
304
+ "description": "Map of option values to next step IDs for conditional routing",
305
+ "additionalProperties": {
306
+ "type": "string"
307
+ }
308
+ },
309
+ "pageSize": {
310
+ "type": "integer",
311
+ "minimum": 1,
312
+ "description": "Number of options visible before scrolling"
313
+ },
314
+ "loop": {
315
+ "type": "boolean",
316
+ "description": "Whether to loop back to start when reaching end of list"
317
+ }
318
+ }
319
+ }
320
+ ]
321
+ },
322
+ "multiselectStep": {
323
+ "allOf": [
324
+ { "$ref": "#/definitions/baseStep" },
325
+ {
326
+ "type": "object",
327
+ "required": ["type", "options"],
328
+ "additionalProperties": false,
329
+ "properties": {
330
+ "id": true,
331
+ "type": {
332
+ "const": "multiselect"
333
+ },
334
+ "message": true,
335
+ "description": true,
336
+ "next": true,
337
+ "when": true,
338
+ "keepValuesOnPrevious": true,
339
+ "required": true,
340
+ "group": true,
341
+ "options": {
342
+ "type": "array",
343
+ "minItems": 1,
344
+ "description": "Array of selectable options",
345
+ "items": {
346
+ "$ref": "#/definitions/selectChoice"
347
+ }
348
+ },
349
+ "default": {
350
+ "type": "array",
351
+ "description": "Default selected option values",
352
+ "items": {
353
+ "type": "string"
354
+ }
355
+ },
356
+ "min": {
357
+ "type": "integer",
358
+ "minimum": 0,
359
+ "description": "Minimum number of selections required"
360
+ },
361
+ "max": {
362
+ "type": "integer",
363
+ "minimum": 1,
364
+ "description": "Maximum number of selections allowed"
365
+ },
366
+ "pageSize": {
367
+ "type": "integer",
368
+ "minimum": 1,
369
+ "description": "Number of options visible before scrolling"
370
+ },
371
+ "loop": {
372
+ "type": "boolean",
373
+ "description": "Whether to loop back to start when reaching end of list"
374
+ }
375
+ }
376
+ }
377
+ ]
378
+ },
379
+ "confirmStep": {
380
+ "allOf": [
381
+ { "$ref": "#/definitions/baseStep" },
382
+ {
383
+ "type": "object",
384
+ "required": ["type"],
385
+ "additionalProperties": false,
386
+ "properties": {
387
+ "id": true,
388
+ "type": {
389
+ "const": "confirm"
390
+ },
391
+ "message": true,
392
+ "description": true,
393
+ "next": true,
394
+ "when": true,
395
+ "keepValuesOnPrevious": true,
396
+ "required": true,
397
+ "group": true,
398
+ "default": {
399
+ "type": "boolean",
400
+ "description": "Default value (true/false)"
401
+ }
402
+ }
403
+ }
404
+ ]
405
+ },
406
+ "passwordStep": {
407
+ "allOf": [
408
+ { "$ref": "#/definitions/baseStep" },
409
+ {
410
+ "type": "object",
411
+ "required": ["type"],
412
+ "additionalProperties": false,
413
+ "properties": {
414
+ "id": true,
415
+ "type": {
416
+ "const": "password"
417
+ },
418
+ "message": true,
419
+ "description": true,
420
+ "next": true,
421
+ "when": true,
422
+ "keepValuesOnPrevious": true,
423
+ "required": true,
424
+ "group": true,
425
+ "validate": {
426
+ "type": "array",
427
+ "description": "Validation rules",
428
+ "items": {
429
+ "$ref": "#/definitions/validationRule"
430
+ }
431
+ }
432
+ }
433
+ }
434
+ ]
435
+ },
436
+ "numberStep": {
437
+ "allOf": [
438
+ { "$ref": "#/definitions/baseStep" },
439
+ {
440
+ "type": "object",
441
+ "required": ["type"],
442
+ "additionalProperties": false,
443
+ "properties": {
444
+ "id": true,
445
+ "type": {
446
+ "const": "number"
447
+ },
448
+ "message": true,
449
+ "description": true,
450
+ "next": true,
451
+ "when": true,
452
+ "keepValuesOnPrevious": true,
453
+ "required": true,
454
+ "group": true,
455
+ "default": {
456
+ "type": "number",
457
+ "description": "Default numeric value"
458
+ },
459
+ "min": {
460
+ "type": "number",
461
+ "description": "Minimum allowed value"
462
+ },
463
+ "max": {
464
+ "type": "number",
465
+ "description": "Maximum allowed value"
466
+ },
467
+ "step": {
468
+ "type": "number",
469
+ "exclusiveMinimum": 0,
470
+ "description": "Step increment for number input"
471
+ }
472
+ }
473
+ }
474
+ ]
475
+ },
476
+ "searchStep": {
477
+ "allOf": [
478
+ { "$ref": "#/definitions/baseStep" },
479
+ {
480
+ "type": "object",
481
+ "required": ["type", "options"],
482
+ "additionalProperties": false,
483
+ "properties": {
484
+ "id": true,
485
+ "type": {
486
+ "const": "search"
487
+ },
488
+ "message": true,
489
+ "description": true,
490
+ "next": true,
491
+ "when": true,
492
+ "keepValuesOnPrevious": true,
493
+ "required": true,
494
+ "group": true,
495
+ "options": {
496
+ "type": "array",
497
+ "minItems": 1,
498
+ "description": "Array of searchable options",
499
+ "items": {
500
+ "$ref": "#/definitions/selectChoice"
501
+ }
502
+ },
503
+ "default": {
504
+ "type": "string",
505
+ "description": "Default selected option value"
506
+ },
507
+ "placeholder": {
508
+ "type": "string",
509
+ "description": "Placeholder text for search input"
510
+ },
511
+ "pageSize": {
512
+ "type": "integer",
513
+ "minimum": 1,
514
+ "description": "Number of options visible before scrolling"
515
+ },
516
+ "loop": {
517
+ "type": "boolean",
518
+ "description": "Whether to loop back to start when reaching end of list"
519
+ }
520
+ }
521
+ }
522
+ ]
523
+ },
524
+ "editorStep": {
525
+ "allOf": [
526
+ { "$ref": "#/definitions/baseStep" },
527
+ {
528
+ "type": "object",
529
+ "required": ["type"],
530
+ "additionalProperties": false,
531
+ "properties": {
532
+ "id": true,
533
+ "type": {
534
+ "const": "editor"
535
+ },
536
+ "message": true,
537
+ "description": true,
538
+ "next": true,
539
+ "when": true,
540
+ "keepValuesOnPrevious": true,
541
+ "required": true,
542
+ "group": true,
543
+ "default": {
544
+ "type": "string",
545
+ "description": "Default text content"
546
+ },
547
+ "validate": {
548
+ "type": "array",
549
+ "description": "Validation rules",
550
+ "items": {
551
+ "$ref": "#/definitions/validationRule"
552
+ }
553
+ }
554
+ }
555
+ }
556
+ ]
557
+ },
558
+ "pathStep": {
559
+ "allOf": [
560
+ { "$ref": "#/definitions/baseStep" },
561
+ {
562
+ "type": "object",
563
+ "required": ["type"],
564
+ "additionalProperties": false,
565
+ "properties": {
566
+ "id": true,
567
+ "type": {
568
+ "const": "path"
569
+ },
570
+ "message": true,
571
+ "description": true,
572
+ "next": true,
573
+ "when": true,
574
+ "keepValuesOnPrevious": true,
575
+ "required": true,
576
+ "group": true,
577
+ "default": {
578
+ "type": "string",
579
+ "description": "Default path value"
580
+ },
581
+ "placeholder": {
582
+ "type": "string",
583
+ "description": "Placeholder text for path input"
584
+ },
585
+ "validate": {
586
+ "type": "array",
587
+ "description": "Validation rules",
588
+ "items": {
589
+ "$ref": "#/definitions/validationRule"
590
+ }
591
+ }
592
+ }
593
+ }
594
+ ]
595
+ },
596
+ "toggleStep": {
597
+ "allOf": [
598
+ { "$ref": "#/definitions/baseStep" },
599
+ {
600
+ "type": "object",
601
+ "required": ["type"],
602
+ "additionalProperties": false,
603
+ "properties": {
604
+ "id": true,
605
+ "type": {
606
+ "const": "toggle"
607
+ },
608
+ "message": true,
609
+ "description": true,
610
+ "next": true,
611
+ "when": true,
612
+ "keepValuesOnPrevious": true,
613
+ "required": true,
614
+ "group": true,
615
+ "default": {
616
+ "type": "boolean",
617
+ "description": "Default toggle state"
618
+ },
619
+ "active": {
620
+ "type": "string",
621
+ "description": "Label for active/on state"
622
+ },
623
+ "inactive": {
624
+ "type": "string",
625
+ "description": "Label for inactive/off state"
626
+ }
627
+ }
628
+ }
629
+ ]
630
+ },
631
+ "messageStep": {
632
+ "allOf": [
633
+ { "$ref": "#/definitions/baseStep" },
634
+ {
635
+ "type": "object",
636
+ "required": ["type"],
637
+ "additionalProperties": false,
638
+ "properties": {
639
+ "id": true,
640
+ "type": {
641
+ "const": "message"
642
+ },
643
+ "message": true,
644
+ "description": true,
645
+ "next": true,
646
+ "when": true,
647
+ "keepValuesOnPrevious": true,
648
+ "required": true,
649
+ "group": true
650
+ }
651
+ }
652
+ ]
653
+ },
654
+ "selectOption": {
655
+ "type": "object",
656
+ "required": ["value", "label"],
657
+ "additionalProperties": false,
658
+ "properties": {
659
+ "value": {
660
+ "type": "string",
661
+ "description": "The value returned when this option is selected"
662
+ },
663
+ "label": {
664
+ "type": "string",
665
+ "description": "The display label for this option"
666
+ },
667
+ "hint": {
668
+ "type": "string",
669
+ "description": "Optional hint text displayed below the label"
670
+ },
671
+ "disabled": {
672
+ "oneOf": [
673
+ { "type": "boolean" },
674
+ { "type": "string", "description": "Reason why this option is disabled" }
675
+ ]
676
+ }
677
+ }
678
+ },
679
+ "separatorOption": {
680
+ "type": "object",
681
+ "required": ["separator"],
682
+ "additionalProperties": false,
683
+ "properties": {
684
+ "separator": {
685
+ "type": "string",
686
+ "description": "Visual separator label"
687
+ }
688
+ }
689
+ },
690
+ "selectChoice": {
691
+ "oneOf": [
692
+ { "$ref": "#/definitions/selectOption" },
693
+ { "$ref": "#/definitions/separatorOption" }
694
+ ]
695
+ },
696
+ "validationRule": {
697
+ "oneOf": [
698
+ {
699
+ "type": "object",
700
+ "required": ["rule"],
701
+ "additionalProperties": false,
702
+ "properties": {
703
+ "rule": {
704
+ "const": "required"
705
+ },
706
+ "message": {
707
+ "type": "string",
708
+ "description": "Custom error message"
709
+ }
710
+ }
711
+ },
712
+ {
713
+ "type": "object",
714
+ "required": ["rule", "value"],
715
+ "additionalProperties": false,
716
+ "properties": {
717
+ "rule": {
718
+ "const": "minLength"
719
+ },
720
+ "value": {
721
+ "type": "number",
722
+ "description": "Minimum string length"
723
+ },
724
+ "message": {
725
+ "type": "string",
726
+ "description": "Custom error message"
727
+ }
728
+ }
729
+ },
730
+ {
731
+ "type": "object",
732
+ "required": ["rule", "value"],
733
+ "additionalProperties": false,
734
+ "properties": {
735
+ "rule": {
736
+ "const": "maxLength"
737
+ },
738
+ "value": {
739
+ "type": "number",
740
+ "description": "Maximum string length"
741
+ },
742
+ "message": {
743
+ "type": "string",
744
+ "description": "Custom error message"
745
+ }
746
+ }
747
+ },
748
+ {
749
+ "type": "object",
750
+ "required": ["rule", "value"],
751
+ "additionalProperties": false,
752
+ "properties": {
753
+ "rule": {
754
+ "const": "pattern"
755
+ },
756
+ "value": {
757
+ "type": "string",
758
+ "description": "Regular expression pattern"
759
+ },
760
+ "message": {
761
+ "type": "string",
762
+ "description": "Custom error message"
763
+ }
764
+ }
765
+ },
766
+ {
767
+ "type": "object",
768
+ "required": ["rule", "value"],
769
+ "additionalProperties": false,
770
+ "properties": {
771
+ "rule": {
772
+ "const": "min"
773
+ },
774
+ "value": {
775
+ "type": "number",
776
+ "description": "Minimum numeric value"
777
+ },
778
+ "message": {
779
+ "type": "string",
780
+ "description": "Custom error message"
781
+ }
782
+ }
783
+ },
784
+ {
785
+ "type": "object",
786
+ "required": ["rule", "value"],
787
+ "additionalProperties": false,
788
+ "properties": {
789
+ "rule": {
790
+ "const": "max"
791
+ },
792
+ "value": {
793
+ "type": "number",
794
+ "description": "Maximum numeric value"
795
+ },
796
+ "message": {
797
+ "type": "string",
798
+ "description": "Custom error message"
799
+ }
800
+ }
801
+ }
802
+ ]
803
+ },
804
+ "condition": {
805
+ "oneOf": [
806
+ {
807
+ "type": "object",
808
+ "required": ["field", "equals"],
809
+ "additionalProperties": false,
810
+ "properties": {
811
+ "field": {
812
+ "type": "string",
813
+ "description": "Step ID or path to check (e.g., 'stepId' or 'stepId.property')"
814
+ },
815
+ "equals": {
816
+ "description": "Value to compare for equality"
817
+ }
818
+ }
819
+ },
820
+ {
821
+ "type": "object",
822
+ "required": ["field", "notEquals"],
823
+ "additionalProperties": false,
824
+ "properties": {
825
+ "field": {
826
+ "type": "string",
827
+ "description": "Step ID or path to check"
828
+ },
829
+ "notEquals": {
830
+ "description": "Value to compare for inequality"
831
+ }
832
+ }
833
+ },
834
+ {
835
+ "type": "object",
836
+ "required": ["field", "includes"],
837
+ "additionalProperties": false,
838
+ "properties": {
839
+ "field": {
840
+ "type": "string",
841
+ "description": "Step ID or path to check"
842
+ },
843
+ "includes": {
844
+ "description": "Value that should be included in array or string"
845
+ }
846
+ }
847
+ },
848
+ {
849
+ "type": "object",
850
+ "required": ["field", "notIncludes"],
851
+ "additionalProperties": false,
852
+ "properties": {
853
+ "field": {
854
+ "type": "string",
855
+ "description": "Step ID or path to check"
856
+ },
857
+ "notIncludes": {
858
+ "description": "Value that should not be included in array or string"
859
+ }
860
+ }
861
+ },
862
+ {
863
+ "type": "object",
864
+ "required": ["field", "greaterThan"],
865
+ "additionalProperties": false,
866
+ "properties": {
867
+ "field": {
868
+ "type": "string",
869
+ "description": "Step ID or path to check"
870
+ },
871
+ "greaterThan": {
872
+ "type": "number",
873
+ "description": "Value to compare (greater than)"
874
+ }
875
+ }
876
+ },
877
+ {
878
+ "type": "object",
879
+ "required": ["field", "lessThan"],
880
+ "additionalProperties": false,
881
+ "properties": {
882
+ "field": {
883
+ "type": "string",
884
+ "description": "Step ID or path to check"
885
+ },
886
+ "lessThan": {
887
+ "type": "number",
888
+ "description": "Value to compare (less than)"
889
+ }
890
+ }
891
+ },
892
+ {
893
+ "type": "object",
894
+ "required": ["field", "isEmpty"],
895
+ "additionalProperties": false,
896
+ "properties": {
897
+ "field": {
898
+ "type": "string",
899
+ "description": "Step ID or path to check"
900
+ },
901
+ "isEmpty": {
902
+ "const": true,
903
+ "description": "Check if field is empty"
904
+ }
905
+ }
906
+ },
907
+ {
908
+ "type": "object",
909
+ "required": ["field", "isNotEmpty"],
910
+ "additionalProperties": false,
911
+ "properties": {
912
+ "field": {
913
+ "type": "string",
914
+ "description": "Step ID or path to check"
915
+ },
916
+ "isNotEmpty": {
917
+ "const": true,
918
+ "description": "Check if field is not empty"
919
+ }
920
+ }
921
+ },
922
+ {
923
+ "type": "object",
924
+ "required": ["all"],
925
+ "additionalProperties": false,
926
+ "properties": {
927
+ "all": {
928
+ "type": "array",
929
+ "description": "All conditions must be true",
930
+ "items": {
931
+ "$ref": "#/definitions/condition"
932
+ }
933
+ }
934
+ }
935
+ },
936
+ {
937
+ "type": "object",
938
+ "required": ["any"],
939
+ "additionalProperties": false,
940
+ "properties": {
941
+ "any": {
942
+ "type": "array",
943
+ "description": "Any condition must be true",
944
+ "items": {
945
+ "$ref": "#/definitions/condition"
946
+ }
947
+ }
948
+ }
949
+ },
950
+ {
951
+ "type": "object",
952
+ "required": ["not"],
953
+ "additionalProperties": false,
954
+ "properties": {
955
+ "not": {
956
+ "$ref": "#/definitions/condition",
957
+ "description": "Negate the condition"
958
+ }
959
+ }
960
+ }
961
+ ]
962
+ }
963
+ }
964
+ }