@praxisui/cron-builder 9.0.0-beta.8 → 9.0.0-beta.81
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/README.md +6 -6
- package/ai/component-registry.json +1657 -0
- package/package.json +8 -4
|
@@ -0,0 +1,1657 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"generatedAt": "2026-07-19T23:44:00.907Z",
|
|
4
|
+
"packageName": "@praxisui/cron-builder",
|
|
5
|
+
"packageVersion": "9.0.0-beta.81",
|
|
6
|
+
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
|
+
"sourceRegistryVersion": "1.0.0",
|
|
8
|
+
"componentCount": 1,
|
|
9
|
+
"components": {
|
|
10
|
+
"pdx-cron-builder": {
|
|
11
|
+
"id": "pdx-cron-builder",
|
|
12
|
+
"description": "Visual editor for CRON expressions.",
|
|
13
|
+
"category": "builder",
|
|
14
|
+
"inputs": [
|
|
15
|
+
{
|
|
16
|
+
"name": "metadata",
|
|
17
|
+
"type": "CronBuilderMetadata",
|
|
18
|
+
"required": false,
|
|
19
|
+
"description": "Configuracao do builder (campos, presets, validacao, UI).",
|
|
20
|
+
"label": "Metadata"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"outputs": [],
|
|
24
|
+
"configSchemaId": null,
|
|
25
|
+
"selector": "pdx-cron-builder",
|
|
26
|
+
"friendlyName": "Praxis Cron Builder",
|
|
27
|
+
"tags": [
|
|
28
|
+
"widget",
|
|
29
|
+
"cron",
|
|
30
|
+
"configurable"
|
|
31
|
+
],
|
|
32
|
+
"lib": "@praxisui/cron-builder",
|
|
33
|
+
"source": "projects/praxis-cron-builder/src/lib/praxis-cron-builder.metadata.ts",
|
|
34
|
+
"exportName": "PRAXIS_CRON_BUILDER_COMPONENT_METADATA",
|
|
35
|
+
"componentCapabilities": [
|
|
36
|
+
{
|
|
37
|
+
"path": "label",
|
|
38
|
+
"category": "meta",
|
|
39
|
+
"valueKind": "string",
|
|
40
|
+
"description": "Field label (if exposed by host)."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"path": "hint",
|
|
44
|
+
"category": "ui",
|
|
45
|
+
"valueKind": "string",
|
|
46
|
+
"description": "Helper text (if exposed by host)."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "enableSeconds",
|
|
50
|
+
"category": "fields",
|
|
51
|
+
"valueKind": "boolean",
|
|
52
|
+
"description": "Enable seconds selector."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "presets",
|
|
56
|
+
"category": "presets",
|
|
57
|
+
"valueKind": "array",
|
|
58
|
+
"description": "Presets list (label + cron)."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"path": "presets[].label",
|
|
62
|
+
"category": "presets",
|
|
63
|
+
"valueKind": "string",
|
|
64
|
+
"description": "Preset label."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"path": "presets[].cron",
|
|
68
|
+
"category": "presets",
|
|
69
|
+
"valueKind": "string",
|
|
70
|
+
"description": "Preset cron expression."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"path": "metadata",
|
|
74
|
+
"category": "meta",
|
|
75
|
+
"valueKind": "object",
|
|
76
|
+
"description": "CronBuilderMetadata input."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"path": "metadata.mode",
|
|
80
|
+
"category": "behavior",
|
|
81
|
+
"valueKind": "enum",
|
|
82
|
+
"allowedValues": [
|
|
83
|
+
"simple",
|
|
84
|
+
"advanced",
|
|
85
|
+
"both"
|
|
86
|
+
],
|
|
87
|
+
"description": "Enabled UI modes."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "metadata.fields",
|
|
91
|
+
"category": "fields",
|
|
92
|
+
"valueKind": "object",
|
|
93
|
+
"description": "Field visibility toggles."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"path": "metadata.fields.seconds",
|
|
97
|
+
"category": "fields",
|
|
98
|
+
"valueKind": "boolean",
|
|
99
|
+
"description": "Show seconds field."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"path": "metadata.fields.minutes",
|
|
103
|
+
"category": "fields",
|
|
104
|
+
"valueKind": "boolean",
|
|
105
|
+
"description": "Show minutes field."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"path": "metadata.fields.hours",
|
|
109
|
+
"category": "fields",
|
|
110
|
+
"valueKind": "boolean",
|
|
111
|
+
"description": "Show hours field."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"path": "metadata.fields.dom",
|
|
115
|
+
"category": "fields",
|
|
116
|
+
"valueKind": "boolean",
|
|
117
|
+
"description": "Show day-of-month field."
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"path": "metadata.fields.month",
|
|
121
|
+
"category": "fields",
|
|
122
|
+
"valueKind": "boolean",
|
|
123
|
+
"description": "Show month field."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"path": "metadata.fields.dow",
|
|
127
|
+
"category": "fields",
|
|
128
|
+
"valueKind": "boolean",
|
|
129
|
+
"description": "Show day-of-week field."
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"path": "metadata.timezone",
|
|
133
|
+
"category": "i18n",
|
|
134
|
+
"valueKind": "string",
|
|
135
|
+
"description": "IANA timezone used for preview."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"path": "metadata.locale",
|
|
139
|
+
"category": "i18n",
|
|
140
|
+
"valueKind": "string",
|
|
141
|
+
"description": "Locale used for humanized text."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"path": "metadata.presets",
|
|
145
|
+
"category": "presets",
|
|
146
|
+
"valueKind": "array",
|
|
147
|
+
"description": "Presets list inside metadata."
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"path": "metadata.presets[].label",
|
|
151
|
+
"category": "presets",
|
|
152
|
+
"valueKind": "string",
|
|
153
|
+
"description": "Preset label."
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"path": "metadata.presets[].cron",
|
|
157
|
+
"category": "presets",
|
|
158
|
+
"valueKind": "string",
|
|
159
|
+
"description": "Preset cron expression."
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"path": "metadata.previewOccurrences",
|
|
163
|
+
"category": "preview",
|
|
164
|
+
"valueKind": "number",
|
|
165
|
+
"description": "Number of preview dates."
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"path": "metadata.previewFrom",
|
|
169
|
+
"category": "preview",
|
|
170
|
+
"valueKind": "string",
|
|
171
|
+
"description": "Preview start date (ISO string)."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"path": "metadata.validators",
|
|
175
|
+
"category": "validation",
|
|
176
|
+
"valueKind": "object",
|
|
177
|
+
"description": "Custom validation messages."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"path": "metadata.validators.requiredMessage",
|
|
181
|
+
"category": "validation",
|
|
182
|
+
"valueKind": "string",
|
|
183
|
+
"description": "Required message."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"path": "metadata.validators.invalidCronMessage",
|
|
187
|
+
"category": "validation",
|
|
188
|
+
"valueKind": "string",
|
|
189
|
+
"description": "Invalid cron message."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"path": "metadata.validationTrigger",
|
|
193
|
+
"category": "validation",
|
|
194
|
+
"valueKind": "enum",
|
|
195
|
+
"allowedValues": [
|
|
196
|
+
"change",
|
|
197
|
+
"blur"
|
|
198
|
+
],
|
|
199
|
+
"description": "Validation trigger."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"path": "metadata.validationDebounce",
|
|
203
|
+
"category": "validation",
|
|
204
|
+
"valueKind": "number",
|
|
205
|
+
"description": "Validation debounce (ms)."
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"path": "metadata.errorPosition",
|
|
209
|
+
"category": "ui",
|
|
210
|
+
"valueKind": "enum",
|
|
211
|
+
"allowedValues": [
|
|
212
|
+
"tooltip",
|
|
213
|
+
"inline"
|
|
214
|
+
],
|
|
215
|
+
"description": "Error display position."
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"path": "metadata.showInlineErrors",
|
|
219
|
+
"category": "ui",
|
|
220
|
+
"valueKind": "boolean",
|
|
221
|
+
"description": "Show inline errors."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"path": "metadata.hint",
|
|
225
|
+
"category": "ui",
|
|
226
|
+
"valueKind": "string",
|
|
227
|
+
"description": "Hint text."
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"path": "schedule",
|
|
231
|
+
"category": "schedule",
|
|
232
|
+
"valueKind": "object",
|
|
233
|
+
"description": "Canonical scheduler authoring config."
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"path": "schedule.kind",
|
|
237
|
+
"category": "schedule",
|
|
238
|
+
"valueKind": "enum",
|
|
239
|
+
"allowedValues": [
|
|
240
|
+
"once",
|
|
241
|
+
"interval",
|
|
242
|
+
"daily",
|
|
243
|
+
"weekly",
|
|
244
|
+
"monthly",
|
|
245
|
+
"customCron"
|
|
246
|
+
],
|
|
247
|
+
"description": "Business schedule intent."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"path": "schedule.timezone",
|
|
251
|
+
"category": "i18n",
|
|
252
|
+
"valueKind": "string",
|
|
253
|
+
"description": "IANA timezone used by the schedule."
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"path": "schedule.locale",
|
|
257
|
+
"category": "i18n",
|
|
258
|
+
"valueKind": "string",
|
|
259
|
+
"description": "Locale used by humanized text and preview."
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"path": "schedule.expression",
|
|
263
|
+
"category": "dialects",
|
|
264
|
+
"valueKind": "object",
|
|
265
|
+
"description": "Technical CRON representation."
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"path": "schedule.expression.cron",
|
|
269
|
+
"category": "dialects",
|
|
270
|
+
"valueKind": "string",
|
|
271
|
+
"description": "CRON expression for custom or compiled schedules."
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"path": "schedule.expression.dialect",
|
|
275
|
+
"category": "dialects",
|
|
276
|
+
"valueKind": "enum",
|
|
277
|
+
"allowedValues": [
|
|
278
|
+
"unix",
|
|
279
|
+
"quartz",
|
|
280
|
+
"aws-eventbridge",
|
|
281
|
+
"kubernetes",
|
|
282
|
+
"github-actions",
|
|
283
|
+
"gcp-scheduler"
|
|
284
|
+
],
|
|
285
|
+
"description": "CRON dialect family."
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"path": "schedule.expression.seconds",
|
|
289
|
+
"category": "dialects",
|
|
290
|
+
"valueKind": "boolean",
|
|
291
|
+
"description": "Whether the CRON representation includes seconds."
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"path": "schedule.recurrence",
|
|
295
|
+
"category": "recurrence",
|
|
296
|
+
"valueKind": "object",
|
|
297
|
+
"description": "Structured recurrence intent."
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"path": "schedule.recurrence.once.runAt",
|
|
301
|
+
"category": "recurrence",
|
|
302
|
+
"valueKind": "string",
|
|
303
|
+
"description": "ISO date-time for one-time schedules."
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"path": "schedule.recurrence.interval.every",
|
|
307
|
+
"category": "recurrence",
|
|
308
|
+
"valueKind": "number",
|
|
309
|
+
"description": "Interval amount."
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"path": "schedule.recurrence.interval.unit",
|
|
313
|
+
"category": "recurrence",
|
|
314
|
+
"valueKind": "enum",
|
|
315
|
+
"allowedValues": [
|
|
316
|
+
"minutes",
|
|
317
|
+
"hours",
|
|
318
|
+
"days",
|
|
319
|
+
"weeks"
|
|
320
|
+
],
|
|
321
|
+
"description": "Interval unit."
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"path": "schedule.recurrence.daily.times",
|
|
325
|
+
"category": "recurrence",
|
|
326
|
+
"valueKind": "array",
|
|
327
|
+
"description": "Daily run times in HH:mm format."
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"path": "schedule.recurrence.daily.onlyWeekdays",
|
|
331
|
+
"category": "recurrence",
|
|
332
|
+
"valueKind": "boolean",
|
|
333
|
+
"description": "Limit daily schedule to Monday through Friday."
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"path": "schedule.recurrence.weekly.daysOfWeek",
|
|
337
|
+
"category": "recurrence",
|
|
338
|
+
"valueKind": "array",
|
|
339
|
+
"description": "Weekdays as numbers where 0 is Sunday."
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"path": "schedule.recurrence.weekly.times",
|
|
343
|
+
"category": "recurrence",
|
|
344
|
+
"valueKind": "array",
|
|
345
|
+
"description": "Weekly run times in HH:mm format."
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"path": "schedule.recurrence.monthly.mode",
|
|
349
|
+
"category": "recurrence",
|
|
350
|
+
"valueKind": "enum",
|
|
351
|
+
"allowedValues": [
|
|
352
|
+
"dayOfMonth",
|
|
353
|
+
"nthWeekday",
|
|
354
|
+
"lastDay",
|
|
355
|
+
"lastWeekday"
|
|
356
|
+
],
|
|
357
|
+
"description": "Monthly recurrence strategy."
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"path": "schedule.recurrence.monthly.dayOfMonth",
|
|
361
|
+
"category": "recurrence",
|
|
362
|
+
"valueKind": "number",
|
|
363
|
+
"description": "Day of month for monthly schedules."
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"path": "schedule.recurrence.monthly.nth",
|
|
367
|
+
"category": "recurrence",
|
|
368
|
+
"valueKind": "number",
|
|
369
|
+
"description": "Nth weekday occurrence in the month."
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"path": "schedule.recurrence.monthly.weekday",
|
|
373
|
+
"category": "recurrence",
|
|
374
|
+
"valueKind": "number",
|
|
375
|
+
"description": "Weekday for nth weekday monthly schedules."
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"path": "schedule.recurrence.monthly.times",
|
|
379
|
+
"category": "recurrence",
|
|
380
|
+
"valueKind": "array",
|
|
381
|
+
"description": "Monthly run times in HH:mm format."
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"path": "schedule.window.startAt",
|
|
385
|
+
"category": "policy",
|
|
386
|
+
"valueKind": "string",
|
|
387
|
+
"description": "ISO start date-time for schedule validity."
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"path": "schedule.window.endAt",
|
|
391
|
+
"category": "policy",
|
|
392
|
+
"valueKind": "string",
|
|
393
|
+
"description": "ISO end date-time for schedule validity."
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"path": "schedule.executionPolicy.enabled",
|
|
397
|
+
"category": "policy",
|
|
398
|
+
"valueKind": "boolean",
|
|
399
|
+
"description": "Whether the schedule is active."
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"path": "schedule.executionPolicy.misfirePolicy",
|
|
403
|
+
"category": "policy",
|
|
404
|
+
"valueKind": "enum",
|
|
405
|
+
"allowedValues": [
|
|
406
|
+
"skip",
|
|
407
|
+
"run-late",
|
|
408
|
+
"run-once"
|
|
409
|
+
],
|
|
410
|
+
"description": "Policy for missed scheduled runs."
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"path": "schedule.executionPolicy.concurrencyPolicy",
|
|
414
|
+
"category": "policy",
|
|
415
|
+
"valueKind": "enum",
|
|
416
|
+
"allowedValues": [
|
|
417
|
+
"allow",
|
|
418
|
+
"forbid",
|
|
419
|
+
"replace"
|
|
420
|
+
],
|
|
421
|
+
"description": "Policy for overlapping runs."
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"path": "schedule.executionPolicy.flexibleWindowMinutes",
|
|
425
|
+
"category": "policy",
|
|
426
|
+
"valueKind": "number",
|
|
427
|
+
"description": "Flexible delivery window in minutes."
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"path": "schedule.executionPolicy.jitterMinutes",
|
|
431
|
+
"category": "policy",
|
|
432
|
+
"valueKind": "number",
|
|
433
|
+
"description": "Randomized delay window in minutes."
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"path": "schedule.preview.occurrences",
|
|
437
|
+
"category": "preview",
|
|
438
|
+
"valueKind": "number",
|
|
439
|
+
"description": "Number of occurrences to preview."
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"path": "schedule.preview.from",
|
|
443
|
+
"category": "preview",
|
|
444
|
+
"valueKind": "string",
|
|
445
|
+
"description": "ISO date-time used as preview start."
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"path": "schedule.governance.name",
|
|
449
|
+
"category": "governance",
|
|
450
|
+
"valueKind": "string",
|
|
451
|
+
"description": "Schedule name."
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"path": "schedule.governance.description",
|
|
455
|
+
"category": "governance",
|
|
456
|
+
"valueKind": "string",
|
|
457
|
+
"description": "Schedule description."
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"path": "schedule.governance.owner",
|
|
461
|
+
"category": "governance",
|
|
462
|
+
"valueKind": "string",
|
|
463
|
+
"description": "Schedule owner."
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"path": "schedule.governance.tags",
|
|
467
|
+
"category": "governance",
|
|
468
|
+
"valueKind": "array",
|
|
469
|
+
"description": "Governance tags."
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"path": "diagnostics",
|
|
473
|
+
"category": "validation",
|
|
474
|
+
"valueKind": "array",
|
|
475
|
+
"description": "Read-only structured schedule diagnostics."
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"path": "preview",
|
|
479
|
+
"category": "preview",
|
|
480
|
+
"valueKind": "array",
|
|
481
|
+
"description": "Read-only structured preview occurrences."
|
|
482
|
+
}
|
|
483
|
+
],
|
|
484
|
+
"componentCapabilityNotes": [
|
|
485
|
+
"presets[] should be merged by cron or label to avoid replacing all entries.",
|
|
486
|
+
"metadata.previewFrom expects an ISO date string when provided.",
|
|
487
|
+
"schedule is the canonical scheduler authoring state; value remains the current CRON string compatibility surface.",
|
|
488
|
+
"Prefer schedule.kind and schedule.recurrence for business intent; use schedule.expression.cron only for custom CRON edits."
|
|
489
|
+
],
|
|
490
|
+
"componentContext": {
|
|
491
|
+
"version": "v1",
|
|
492
|
+
"optionsByPath": {},
|
|
493
|
+
"actionCatalog": [
|
|
494
|
+
{
|
|
495
|
+
"id": "label.set",
|
|
496
|
+
"intentExamples": [
|
|
497
|
+
"label",
|
|
498
|
+
"rótulo",
|
|
499
|
+
"titulo"
|
|
500
|
+
],
|
|
501
|
+
"patchTemplate": {
|
|
502
|
+
"label": "{{value}}"
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"id": "hint.set",
|
|
507
|
+
"intentExamples": [
|
|
508
|
+
"hint",
|
|
509
|
+
"help",
|
|
510
|
+
"ajuda"
|
|
511
|
+
],
|
|
512
|
+
"patchTemplate": {
|
|
513
|
+
"hint": "{{value}}"
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"id": "enableSeconds.enable",
|
|
518
|
+
"intentExamples": [
|
|
519
|
+
"seconds",
|
|
520
|
+
"segundos",
|
|
521
|
+
"enable seconds"
|
|
522
|
+
],
|
|
523
|
+
"patchTemplate": {
|
|
524
|
+
"enableSeconds": true
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"id": "enableSeconds.disable",
|
|
529
|
+
"intentExamples": [
|
|
530
|
+
"disable seconds",
|
|
531
|
+
"sem segundos"
|
|
532
|
+
],
|
|
533
|
+
"patchTemplate": {
|
|
534
|
+
"enableSeconds": false
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"id": "preset.add",
|
|
539
|
+
"intentExamples": [
|
|
540
|
+
"add preset",
|
|
541
|
+
"new preset",
|
|
542
|
+
"preset"
|
|
543
|
+
],
|
|
544
|
+
"patchTemplate": {
|
|
545
|
+
"presets": [
|
|
546
|
+
{
|
|
547
|
+
"label": "{{value}}",
|
|
548
|
+
"cron": "{{target}}"
|
|
549
|
+
}
|
|
550
|
+
]
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"id": "preset.label.set",
|
|
555
|
+
"intentExamples": [
|
|
556
|
+
"rename preset",
|
|
557
|
+
"preset label"
|
|
558
|
+
],
|
|
559
|
+
"patchTemplate": {
|
|
560
|
+
"presets": [
|
|
561
|
+
{
|
|
562
|
+
"cron": "{{target}}",
|
|
563
|
+
"label": "{{value}}"
|
|
564
|
+
}
|
|
565
|
+
]
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
"id": "preset.cron.set",
|
|
570
|
+
"intentExamples": [
|
|
571
|
+
"preset cron",
|
|
572
|
+
"cron expression"
|
|
573
|
+
],
|
|
574
|
+
"patchTemplate": {
|
|
575
|
+
"presets": [
|
|
576
|
+
{
|
|
577
|
+
"label": "{{target}}",
|
|
578
|
+
"cron": "{{value}}"
|
|
579
|
+
}
|
|
580
|
+
]
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"id": "schedule.daily.set",
|
|
585
|
+
"intentExamples": [
|
|
586
|
+
"daily",
|
|
587
|
+
"diario",
|
|
588
|
+
"diário",
|
|
589
|
+
"every day"
|
|
590
|
+
],
|
|
591
|
+
"patchTemplate": {
|
|
592
|
+
"schedule": {
|
|
593
|
+
"kind": "daily",
|
|
594
|
+
"timezone": "{{timezone}}",
|
|
595
|
+
"recurrence": {
|
|
596
|
+
"daily": {
|
|
597
|
+
"times": [
|
|
598
|
+
"{{value}}"
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
"id": "schedule.weekdays.set",
|
|
607
|
+
"intentExamples": [
|
|
608
|
+
"weekdays",
|
|
609
|
+
"dias uteis",
|
|
610
|
+
"dias úteis",
|
|
611
|
+
"monday to friday"
|
|
612
|
+
],
|
|
613
|
+
"patchTemplate": {
|
|
614
|
+
"schedule": {
|
|
615
|
+
"kind": "daily",
|
|
616
|
+
"timezone": "{{timezone}}",
|
|
617
|
+
"recurrence": {
|
|
618
|
+
"daily": {
|
|
619
|
+
"times": [
|
|
620
|
+
"{{value}}"
|
|
621
|
+
],
|
|
622
|
+
"onlyWeekdays": true
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"id": "schedule.timezone.set",
|
|
630
|
+
"intentExamples": [
|
|
631
|
+
"timezone",
|
|
632
|
+
"fuso",
|
|
633
|
+
"fuso horario",
|
|
634
|
+
"fuso horário"
|
|
635
|
+
],
|
|
636
|
+
"patchTemplate": {
|
|
637
|
+
"schedule": {
|
|
638
|
+
"timezone": "{{value}}"
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"id": "schedule.concurrency.set",
|
|
644
|
+
"intentExamples": [
|
|
645
|
+
"concurrency",
|
|
646
|
+
"concorrencia",
|
|
647
|
+
"concorrência",
|
|
648
|
+
"overlap"
|
|
649
|
+
],
|
|
650
|
+
"patchTemplate": {
|
|
651
|
+
"schedule": {
|
|
652
|
+
"executionPolicy": {
|
|
653
|
+
"concurrencyPolicy": "{{value}}"
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
],
|
|
659
|
+
"fieldResolvers": {
|
|
660
|
+
"presets[]": [
|
|
661
|
+
"label",
|
|
662
|
+
"cron"
|
|
663
|
+
]
|
|
664
|
+
},
|
|
665
|
+
"hints": [
|
|
666
|
+
"Use presets[].label or presets[].cron as merge keys; avoid array indexes.",
|
|
667
|
+
"Prefer schedule.kind plus schedule.recurrence for business intent; use schedule.expression.cron only when the user explicitly asks for custom CRON.",
|
|
668
|
+
"Cron expressions should be validated with diagnostics before applying to production."
|
|
669
|
+
]
|
|
670
|
+
},
|
|
671
|
+
"authoringManifest": {
|
|
672
|
+
"schemaVersion": "1.0.0",
|
|
673
|
+
"componentId": "pdx-cron-builder",
|
|
674
|
+
"ownerPackage": "@praxisui/cron-builder",
|
|
675
|
+
"configSchemaId": "CronBuilderMetadata",
|
|
676
|
+
"manifestVersion": "1.0.0",
|
|
677
|
+
"runtimeInputs": [
|
|
678
|
+
{
|
|
679
|
+
"name": "metadata",
|
|
680
|
+
"type": "CronBuilderMetadata",
|
|
681
|
+
"description": "Builder UI, timezone, locale, presets, validation and preview configuration."
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
"name": "value",
|
|
685
|
+
"type": "string | ScheduleAuthoringConfig",
|
|
686
|
+
"description": "Current CRON string compatibility value or canonical schedule authoring config."
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"name": "disabled",
|
|
690
|
+
"type": "boolean",
|
|
691
|
+
"description": "ControlValueAccessor disabled state."
|
|
692
|
+
}
|
|
693
|
+
],
|
|
694
|
+
"editableTargets": [
|
|
695
|
+
{
|
|
696
|
+
"kind": "expression",
|
|
697
|
+
"resolver": "schedule-expression",
|
|
698
|
+
"description": "Canonical CRON expression under schedule.expression or legacy value."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"kind": "frequency",
|
|
702
|
+
"resolver": "schedule-kind-and-recurrence",
|
|
703
|
+
"description": "Business recurrence intent compiled into a canonical expression."
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"kind": "timezone",
|
|
707
|
+
"resolver": "schedule-timezone",
|
|
708
|
+
"description": "IANA timezone used for preview and schedule metadata."
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"kind": "preview",
|
|
712
|
+
"resolver": "schedule-preview-config",
|
|
713
|
+
"description": "Read-only preview generation request for next occurrences."
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
"kind": "validation",
|
|
717
|
+
"resolver": "schedule-validation-request",
|
|
718
|
+
"description": "Read-only validation diagnostics request for expression or schedule config."
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"kind": "preset",
|
|
722
|
+
"resolver": "cron-preset-by-label-or-expression",
|
|
723
|
+
"description": "Preset entry in metadata.presets[] or top-level presets[]."
|
|
724
|
+
}
|
|
725
|
+
],
|
|
726
|
+
"operations": [
|
|
727
|
+
{
|
|
728
|
+
"operationId": "cron.expression.set",
|
|
729
|
+
"title": "Set CRON expression",
|
|
730
|
+
"scope": "global",
|
|
731
|
+
"targetKind": "expression",
|
|
732
|
+
"target": {
|
|
733
|
+
"kind": "expression",
|
|
734
|
+
"resolver": "schedule-expression",
|
|
735
|
+
"ambiguityPolicy": "fail",
|
|
736
|
+
"required": false
|
|
737
|
+
},
|
|
738
|
+
"inputSchema": {
|
|
739
|
+
"type": "object",
|
|
740
|
+
"required": [
|
|
741
|
+
"cron"
|
|
742
|
+
],
|
|
743
|
+
"properties": {
|
|
744
|
+
"cron": {
|
|
745
|
+
"type": "string"
|
|
746
|
+
},
|
|
747
|
+
"dialect": {
|
|
748
|
+
"enum": [
|
|
749
|
+
"unix",
|
|
750
|
+
"quartz",
|
|
751
|
+
"aws-eventbridge",
|
|
752
|
+
"kubernetes",
|
|
753
|
+
"github-actions",
|
|
754
|
+
"gcp-scheduler"
|
|
755
|
+
]
|
|
756
|
+
},
|
|
757
|
+
"seconds": {
|
|
758
|
+
"type": "boolean"
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
"effects": [
|
|
763
|
+
{
|
|
764
|
+
"kind": "compile-domain-patch",
|
|
765
|
+
"handler": "cron-expression-set",
|
|
766
|
+
"handlerContract": {
|
|
767
|
+
"reads": [
|
|
768
|
+
"schedule.expression",
|
|
769
|
+
"schedule.timezone",
|
|
770
|
+
"metadata.timezone",
|
|
771
|
+
"value"
|
|
772
|
+
],
|
|
773
|
+
"writes": [
|
|
774
|
+
"schedule.kind",
|
|
775
|
+
"schedule.expression",
|
|
776
|
+
"value",
|
|
777
|
+
"diagnostics"
|
|
778
|
+
],
|
|
779
|
+
"identityKeys": [
|
|
780
|
+
"schedule.expression.cron",
|
|
781
|
+
"schedule.expression.dialect"
|
|
782
|
+
],
|
|
783
|
+
"inputSchema": {
|
|
784
|
+
"type": "object",
|
|
785
|
+
"required": [
|
|
786
|
+
"cron"
|
|
787
|
+
],
|
|
788
|
+
"properties": {
|
|
789
|
+
"cron": {
|
|
790
|
+
"type": "string"
|
|
791
|
+
},
|
|
792
|
+
"dialect": {
|
|
793
|
+
"enum": [
|
|
794
|
+
"unix",
|
|
795
|
+
"quartz",
|
|
796
|
+
"aws-eventbridge",
|
|
797
|
+
"kubernetes",
|
|
798
|
+
"github-actions",
|
|
799
|
+
"gcp-scheduler"
|
|
800
|
+
]
|
|
801
|
+
},
|
|
802
|
+
"seconds": {
|
|
803
|
+
"type": "boolean"
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
},
|
|
807
|
+
"failureModes": [
|
|
808
|
+
"invalid-expression",
|
|
809
|
+
"invalid-dialect",
|
|
810
|
+
"seconds-field-mismatch"
|
|
811
|
+
],
|
|
812
|
+
"description": "Validates and normalizes an explicit CRON expression before writing schedule.expression and the compatibility value."
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
],
|
|
816
|
+
"destructive": false,
|
|
817
|
+
"requiresConfirmation": false,
|
|
818
|
+
"validators": [
|
|
819
|
+
"cron-expression-valid",
|
|
820
|
+
"cron-dialect-compatible",
|
|
821
|
+
"editor-runtime-round-trip"
|
|
822
|
+
],
|
|
823
|
+
"affectedPaths": [
|
|
824
|
+
"schedule.kind",
|
|
825
|
+
"schedule.expression",
|
|
826
|
+
"schedule.expression.cron",
|
|
827
|
+
"schedule.expression.dialect",
|
|
828
|
+
"schedule.expression.seconds",
|
|
829
|
+
"value",
|
|
830
|
+
"diagnostics"
|
|
831
|
+
],
|
|
832
|
+
"submissionImpact": "affects-submission",
|
|
833
|
+
"preconditions": [
|
|
834
|
+
"config-initialized"
|
|
835
|
+
]
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"operationId": "cron.frequency.set",
|
|
839
|
+
"title": "Set schedule frequency",
|
|
840
|
+
"scope": "global",
|
|
841
|
+
"targetKind": "frequency",
|
|
842
|
+
"target": {
|
|
843
|
+
"kind": "frequency",
|
|
844
|
+
"resolver": "schedule-kind-and-recurrence",
|
|
845
|
+
"ambiguityPolicy": "fail",
|
|
846
|
+
"required": false
|
|
847
|
+
},
|
|
848
|
+
"inputSchema": {
|
|
849
|
+
"type": "object",
|
|
850
|
+
"required": [
|
|
851
|
+
"kind",
|
|
852
|
+
"recurrence"
|
|
853
|
+
],
|
|
854
|
+
"properties": {
|
|
855
|
+
"kind": {
|
|
856
|
+
"enum": [
|
|
857
|
+
"once",
|
|
858
|
+
"interval",
|
|
859
|
+
"daily",
|
|
860
|
+
"weekly",
|
|
861
|
+
"monthly",
|
|
862
|
+
"customCron"
|
|
863
|
+
]
|
|
864
|
+
},
|
|
865
|
+
"recurrence": {
|
|
866
|
+
"type": "object"
|
|
867
|
+
},
|
|
868
|
+
"dialect": {
|
|
869
|
+
"enum": [
|
|
870
|
+
"unix",
|
|
871
|
+
"quartz",
|
|
872
|
+
"aws-eventbridge",
|
|
873
|
+
"kubernetes",
|
|
874
|
+
"github-actions",
|
|
875
|
+
"gcp-scheduler"
|
|
876
|
+
]
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
},
|
|
880
|
+
"effects": [
|
|
881
|
+
{
|
|
882
|
+
"kind": "compile-domain-patch",
|
|
883
|
+
"handler": "cron-frequency-to-expression",
|
|
884
|
+
"handlerContract": {
|
|
885
|
+
"reads": [
|
|
886
|
+
"schedule.kind",
|
|
887
|
+
"schedule.recurrence",
|
|
888
|
+
"schedule.timezone",
|
|
889
|
+
"schedule.expression.dialect"
|
|
890
|
+
],
|
|
891
|
+
"writes": [
|
|
892
|
+
"schedule.kind",
|
|
893
|
+
"schedule.recurrence",
|
|
894
|
+
"schedule.expression",
|
|
895
|
+
"value"
|
|
896
|
+
],
|
|
897
|
+
"identityKeys": [
|
|
898
|
+
"schedule.kind"
|
|
899
|
+
],
|
|
900
|
+
"inputSchema": {
|
|
901
|
+
"type": "object",
|
|
902
|
+
"required": [
|
|
903
|
+
"kind",
|
|
904
|
+
"recurrence"
|
|
905
|
+
],
|
|
906
|
+
"properties": {
|
|
907
|
+
"kind": {
|
|
908
|
+
"enum": [
|
|
909
|
+
"once",
|
|
910
|
+
"interval",
|
|
911
|
+
"daily",
|
|
912
|
+
"weekly",
|
|
913
|
+
"monthly",
|
|
914
|
+
"customCron"
|
|
915
|
+
]
|
|
916
|
+
},
|
|
917
|
+
"recurrence": {
|
|
918
|
+
"type": "object"
|
|
919
|
+
},
|
|
920
|
+
"dialect": {
|
|
921
|
+
"enum": [
|
|
922
|
+
"unix",
|
|
923
|
+
"quartz",
|
|
924
|
+
"aws-eventbridge",
|
|
925
|
+
"kubernetes",
|
|
926
|
+
"github-actions",
|
|
927
|
+
"gcp-scheduler"
|
|
928
|
+
]
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
"failureModes": [
|
|
933
|
+
"unsupported-kind",
|
|
934
|
+
"non-portable-frequency",
|
|
935
|
+
"invalid-recurrence",
|
|
936
|
+
"cron-compile-failed"
|
|
937
|
+
],
|
|
938
|
+
"description": "Compiles structured recurrence intent through compileScheduleExpression and updates the canonical schedule expression only when diagnostics have no errors."
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
],
|
|
942
|
+
"destructive": false,
|
|
943
|
+
"requiresConfirmation": false,
|
|
944
|
+
"validators": [
|
|
945
|
+
"frequency-maps-to-canonical-expression",
|
|
946
|
+
"cron-expression-valid",
|
|
947
|
+
"diagnostics-before-patch"
|
|
948
|
+
],
|
|
949
|
+
"affectedPaths": [
|
|
950
|
+
"schedule.kind",
|
|
951
|
+
"schedule.recurrence",
|
|
952
|
+
"schedule.expression",
|
|
953
|
+
"value"
|
|
954
|
+
],
|
|
955
|
+
"submissionImpact": "affects-submission",
|
|
956
|
+
"preconditions": [
|
|
957
|
+
"config-initialized"
|
|
958
|
+
]
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
"operationId": "cron.timezone.set",
|
|
962
|
+
"title": "Set schedule timezone",
|
|
963
|
+
"scope": "global",
|
|
964
|
+
"targetKind": "timezone",
|
|
965
|
+
"target": {
|
|
966
|
+
"kind": "timezone",
|
|
967
|
+
"resolver": "schedule-timezone",
|
|
968
|
+
"ambiguityPolicy": "fail",
|
|
969
|
+
"required": false
|
|
970
|
+
},
|
|
971
|
+
"inputSchema": {
|
|
972
|
+
"type": "object",
|
|
973
|
+
"required": [
|
|
974
|
+
"timezone"
|
|
975
|
+
],
|
|
976
|
+
"properties": {
|
|
977
|
+
"timezone": {
|
|
978
|
+
"type": "string"
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
},
|
|
982
|
+
"effects": [
|
|
983
|
+
{
|
|
984
|
+
"kind": "compile-domain-patch",
|
|
985
|
+
"handler": "cron-timezone-set",
|
|
986
|
+
"handlerContract": {
|
|
987
|
+
"reads": [
|
|
988
|
+
"value",
|
|
989
|
+
"schedule",
|
|
990
|
+
"metadata.timezone",
|
|
991
|
+
"metadata.previewOccurrences",
|
|
992
|
+
"metadata.previewFrom",
|
|
993
|
+
"metadata.locale"
|
|
994
|
+
],
|
|
995
|
+
"writes": [
|
|
996
|
+
"schedule.timezone",
|
|
997
|
+
"metadata.timezone",
|
|
998
|
+
"preview",
|
|
999
|
+
"diagnostics"
|
|
1000
|
+
],
|
|
1001
|
+
"identityKeys": [
|
|
1002
|
+
"schedule.expression.cron",
|
|
1003
|
+
"schedule.timezone"
|
|
1004
|
+
],
|
|
1005
|
+
"inputSchema": {
|
|
1006
|
+
"type": "object",
|
|
1007
|
+
"required": [
|
|
1008
|
+
"timezone"
|
|
1009
|
+
],
|
|
1010
|
+
"properties": {
|
|
1011
|
+
"timezone": {
|
|
1012
|
+
"type": "string"
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
},
|
|
1016
|
+
"failureModes": [
|
|
1017
|
+
"invalid-timezone",
|
|
1018
|
+
"invalid-expression",
|
|
1019
|
+
"preview-generation-failed"
|
|
1020
|
+
],
|
|
1021
|
+
"description": "Sets the IANA timezone used by schedule and metadata, then regenerates preview/diagnostics from the same expression."
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
],
|
|
1025
|
+
"destructive": false,
|
|
1026
|
+
"requiresConfirmation": false,
|
|
1027
|
+
"validators": [
|
|
1028
|
+
"timezone-valid",
|
|
1029
|
+
"preview-matches-expression",
|
|
1030
|
+
"editor-runtime-round-trip"
|
|
1031
|
+
],
|
|
1032
|
+
"affectedPaths": [
|
|
1033
|
+
"schedule.timezone",
|
|
1034
|
+
"metadata.timezone",
|
|
1035
|
+
"preview",
|
|
1036
|
+
"diagnostics"
|
|
1037
|
+
],
|
|
1038
|
+
"submissionImpact": "affects-submission",
|
|
1039
|
+
"preconditions": [
|
|
1040
|
+
"config-initialized"
|
|
1041
|
+
]
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"operationId": "cron.preset.apply",
|
|
1045
|
+
"title": "Apply CRON preset",
|
|
1046
|
+
"scope": "meta",
|
|
1047
|
+
"targetKind": "preset",
|
|
1048
|
+
"target": {
|
|
1049
|
+
"kind": "preset",
|
|
1050
|
+
"resolver": "cron-preset-by-label-or-expression",
|
|
1051
|
+
"ambiguityPolicy": "fail",
|
|
1052
|
+
"required": true
|
|
1053
|
+
},
|
|
1054
|
+
"inputSchema": {
|
|
1055
|
+
"type": "object",
|
|
1056
|
+
"required": [
|
|
1057
|
+
"labelOrCron"
|
|
1058
|
+
],
|
|
1059
|
+
"properties": {
|
|
1060
|
+
"labelOrCron": {
|
|
1061
|
+
"type": "string"
|
|
1062
|
+
},
|
|
1063
|
+
"timezone": {
|
|
1064
|
+
"type": "string"
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
},
|
|
1068
|
+
"effects": [
|
|
1069
|
+
{
|
|
1070
|
+
"kind": "compile-domain-patch",
|
|
1071
|
+
"handler": "cron-preset-apply",
|
|
1072
|
+
"handlerContract": {
|
|
1073
|
+
"reads": [
|
|
1074
|
+
"metadata.presets[]",
|
|
1075
|
+
"presets[]",
|
|
1076
|
+
"schedule.timezone",
|
|
1077
|
+
"metadata.timezone"
|
|
1078
|
+
],
|
|
1079
|
+
"writes": [
|
|
1080
|
+
"schedule.kind",
|
|
1081
|
+
"schedule.expression",
|
|
1082
|
+
"schedule.timezone",
|
|
1083
|
+
"value"
|
|
1084
|
+
],
|
|
1085
|
+
"identityKeys": [
|
|
1086
|
+
"metadata.presets[].label",
|
|
1087
|
+
"metadata.presets[].cron",
|
|
1088
|
+
"presets[].label",
|
|
1089
|
+
"presets[].cron"
|
|
1090
|
+
],
|
|
1091
|
+
"inputSchema": {
|
|
1092
|
+
"type": "object",
|
|
1093
|
+
"required": [
|
|
1094
|
+
"labelOrCron"
|
|
1095
|
+
],
|
|
1096
|
+
"properties": {
|
|
1097
|
+
"labelOrCron": {
|
|
1098
|
+
"type": "string"
|
|
1099
|
+
},
|
|
1100
|
+
"timezone": {
|
|
1101
|
+
"type": "string"
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
},
|
|
1105
|
+
"failureModes": [
|
|
1106
|
+
"preset-not-found",
|
|
1107
|
+
"preset-cron-invalid",
|
|
1108
|
+
"timezone-invalid"
|
|
1109
|
+
],
|
|
1110
|
+
"description": "Resolves a preset by label or cron, validates it through normalizeScheduleValue/createSchedulePreview, then applies the canonical expression."
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
],
|
|
1114
|
+
"destructive": false,
|
|
1115
|
+
"requiresConfirmation": false,
|
|
1116
|
+
"validators": [
|
|
1117
|
+
"preset-exists",
|
|
1118
|
+
"preset-maps-to-canonical-expression",
|
|
1119
|
+
"cron-expression-valid"
|
|
1120
|
+
],
|
|
1121
|
+
"affectedPaths": [
|
|
1122
|
+
"schedule.kind",
|
|
1123
|
+
"schedule.expression",
|
|
1124
|
+
"schedule.timezone",
|
|
1125
|
+
"value"
|
|
1126
|
+
],
|
|
1127
|
+
"submissionImpact": "affects-submission",
|
|
1128
|
+
"preconditions": [
|
|
1129
|
+
"config-initialized",
|
|
1130
|
+
"target-preset-exists"
|
|
1131
|
+
]
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
"operationId": "cron.validate",
|
|
1135
|
+
"title": "Validate schedule",
|
|
1136
|
+
"scope": "global",
|
|
1137
|
+
"targetKind": "validation",
|
|
1138
|
+
"target": {
|
|
1139
|
+
"kind": "validation",
|
|
1140
|
+
"resolver": "schedule-validation-request",
|
|
1141
|
+
"ambiguityPolicy": "fail",
|
|
1142
|
+
"required": false
|
|
1143
|
+
},
|
|
1144
|
+
"inputSchema": {
|
|
1145
|
+
"type": "object",
|
|
1146
|
+
"properties": {
|
|
1147
|
+
"cron": {
|
|
1148
|
+
"type": "string"
|
|
1149
|
+
},
|
|
1150
|
+
"schedule": {
|
|
1151
|
+
"type": "object"
|
|
1152
|
+
},
|
|
1153
|
+
"timezone": {
|
|
1154
|
+
"type": "string"
|
|
1155
|
+
},
|
|
1156
|
+
"dialect": {
|
|
1157
|
+
"enum": [
|
|
1158
|
+
"unix",
|
|
1159
|
+
"quartz",
|
|
1160
|
+
"aws-eventbridge",
|
|
1161
|
+
"kubernetes",
|
|
1162
|
+
"github-actions",
|
|
1163
|
+
"gcp-scheduler"
|
|
1164
|
+
]
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
},
|
|
1168
|
+
"effects": [
|
|
1169
|
+
{
|
|
1170
|
+
"kind": "compile-domain-patch",
|
|
1171
|
+
"handler": "cron-validation-diagnostics",
|
|
1172
|
+
"handlerContract": {
|
|
1173
|
+
"reads": [
|
|
1174
|
+
"value",
|
|
1175
|
+
"schedule",
|
|
1176
|
+
"metadata.timezone"
|
|
1177
|
+
],
|
|
1178
|
+
"writes": [
|
|
1179
|
+
"diagnostics"
|
|
1180
|
+
],
|
|
1181
|
+
"identityKeys": [
|
|
1182
|
+
"schedule.expression.cron",
|
|
1183
|
+
"schedule.timezone"
|
|
1184
|
+
],
|
|
1185
|
+
"inputSchema": {
|
|
1186
|
+
"type": "object",
|
|
1187
|
+
"properties": {
|
|
1188
|
+
"cron": {
|
|
1189
|
+
"type": "string"
|
|
1190
|
+
},
|
|
1191
|
+
"schedule": {
|
|
1192
|
+
"type": "object"
|
|
1193
|
+
},
|
|
1194
|
+
"timezone": {
|
|
1195
|
+
"type": "string"
|
|
1196
|
+
},
|
|
1197
|
+
"dialect": {
|
|
1198
|
+
"enum": [
|
|
1199
|
+
"unix",
|
|
1200
|
+
"quartz",
|
|
1201
|
+
"aws-eventbridge",
|
|
1202
|
+
"kubernetes",
|
|
1203
|
+
"github-actions",
|
|
1204
|
+
"gcp-scheduler"
|
|
1205
|
+
]
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
},
|
|
1209
|
+
"failureModes": [
|
|
1210
|
+
"invalid-expression",
|
|
1211
|
+
"invalid-timezone",
|
|
1212
|
+
"invalid-recurrence"
|
|
1213
|
+
],
|
|
1214
|
+
"description": "Runs normalizeScheduleValue and validateScheduleAuthoringConfig and returns diagnostics without mutating schedule/value paths."
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
],
|
|
1218
|
+
"destructive": false,
|
|
1219
|
+
"requiresConfirmation": false,
|
|
1220
|
+
"validators": [
|
|
1221
|
+
"invalid-schedules-return-diagnostics",
|
|
1222
|
+
"cron-expression-valid",
|
|
1223
|
+
"timezone-valid"
|
|
1224
|
+
],
|
|
1225
|
+
"affectedPaths": [
|
|
1226
|
+
"diagnostics"
|
|
1227
|
+
],
|
|
1228
|
+
"submissionImpact": "none",
|
|
1229
|
+
"preconditions": [
|
|
1230
|
+
"config-initialized"
|
|
1231
|
+
]
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"operationId": "cron.preview.generate",
|
|
1235
|
+
"title": "Generate schedule preview",
|
|
1236
|
+
"scope": "global",
|
|
1237
|
+
"targetKind": "preview",
|
|
1238
|
+
"target": {
|
|
1239
|
+
"kind": "preview",
|
|
1240
|
+
"resolver": "schedule-preview-config",
|
|
1241
|
+
"ambiguityPolicy": "fail",
|
|
1242
|
+
"required": false
|
|
1243
|
+
},
|
|
1244
|
+
"inputSchema": {
|
|
1245
|
+
"type": "object",
|
|
1246
|
+
"properties": {
|
|
1247
|
+
"occurrences": {
|
|
1248
|
+
"type": "number"
|
|
1249
|
+
},
|
|
1250
|
+
"from": {
|
|
1251
|
+
"type": "string"
|
|
1252
|
+
},
|
|
1253
|
+
"timezone": {
|
|
1254
|
+
"type": "string"
|
|
1255
|
+
},
|
|
1256
|
+
"locale": {
|
|
1257
|
+
"type": "string"
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
},
|
|
1261
|
+
"effects": [
|
|
1262
|
+
{
|
|
1263
|
+
"kind": "compile-domain-patch",
|
|
1264
|
+
"handler": "cron-preview-generate",
|
|
1265
|
+
"handlerContract": {
|
|
1266
|
+
"reads": [
|
|
1267
|
+
"value",
|
|
1268
|
+
"schedule",
|
|
1269
|
+
"metadata.previewOccurrences",
|
|
1270
|
+
"metadata.previewFrom",
|
|
1271
|
+
"metadata.timezone",
|
|
1272
|
+
"metadata.locale"
|
|
1273
|
+
],
|
|
1274
|
+
"writes": [
|
|
1275
|
+
"preview",
|
|
1276
|
+
"diagnostics"
|
|
1277
|
+
],
|
|
1278
|
+
"identityKeys": [
|
|
1279
|
+
"schedule.expression.cron",
|
|
1280
|
+
"schedule.timezone",
|
|
1281
|
+
"metadata.previewFrom"
|
|
1282
|
+
],
|
|
1283
|
+
"inputSchema": {
|
|
1284
|
+
"type": "object",
|
|
1285
|
+
"properties": {
|
|
1286
|
+
"occurrences": {
|
|
1287
|
+
"type": "number"
|
|
1288
|
+
},
|
|
1289
|
+
"from": {
|
|
1290
|
+
"type": "string"
|
|
1291
|
+
},
|
|
1292
|
+
"timezone": {
|
|
1293
|
+
"type": "string"
|
|
1294
|
+
},
|
|
1295
|
+
"locale": {
|
|
1296
|
+
"type": "string"
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1300
|
+
"failureModes": [
|
|
1301
|
+
"invalid-expression",
|
|
1302
|
+
"invalid-timezone",
|
|
1303
|
+
"preview-empty",
|
|
1304
|
+
"diagnostics-contain-errors"
|
|
1305
|
+
],
|
|
1306
|
+
"description": "Runs createSchedulePreview and returns read-only preview occurrences plus diagnostics; it does not patch the schedule when validation fails."
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
],
|
|
1310
|
+
"destructive": false,
|
|
1311
|
+
"requiresConfirmation": false,
|
|
1312
|
+
"validators": [
|
|
1313
|
+
"preview-matches-expression",
|
|
1314
|
+
"timezone-valid",
|
|
1315
|
+
"invalid-schedules-return-diagnostics"
|
|
1316
|
+
],
|
|
1317
|
+
"affectedPaths": [
|
|
1318
|
+
"preview",
|
|
1319
|
+
"diagnostics"
|
|
1320
|
+
],
|
|
1321
|
+
"submissionImpact": "none",
|
|
1322
|
+
"preconditions": [
|
|
1323
|
+
"config-initialized"
|
|
1324
|
+
]
|
|
1325
|
+
}
|
|
1326
|
+
],
|
|
1327
|
+
"validators": [
|
|
1328
|
+
{
|
|
1329
|
+
"validatorId": "cron-expression-valid",
|
|
1330
|
+
"level": "error",
|
|
1331
|
+
"code": "PCRON001",
|
|
1332
|
+
"description": "CRON expressions must pass the canonical cron-runtime parser for the selected dialect before schedule/value paths are patched."
|
|
1333
|
+
},
|
|
1334
|
+
{
|
|
1335
|
+
"validatorId": "cron-dialect-compatible",
|
|
1336
|
+
"level": "error",
|
|
1337
|
+
"code": "PCRON002",
|
|
1338
|
+
"description": "Field count, seconds support and dialect-specific rules must match CRON_DIALECTS."
|
|
1339
|
+
},
|
|
1340
|
+
{
|
|
1341
|
+
"validatorId": "timezone-valid",
|
|
1342
|
+
"level": "error",
|
|
1343
|
+
"code": "PCRON003",
|
|
1344
|
+
"description": "Timezone must be a valid IANA timezone accepted by Intl.DateTimeFormat and schedule preview."
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"validatorId": "frequency-maps-to-canonical-expression",
|
|
1348
|
+
"level": "error",
|
|
1349
|
+
"code": "PCRON004",
|
|
1350
|
+
"description": "Structured frequency intent must compile through compileScheduleExpression into the canonical expression when portable."
|
|
1351
|
+
},
|
|
1352
|
+
{
|
|
1353
|
+
"validatorId": "preset-exists",
|
|
1354
|
+
"level": "error",
|
|
1355
|
+
"code": "PCRON005",
|
|
1356
|
+
"description": "Preset operations must resolve an existing preset by label or cron expression."
|
|
1357
|
+
},
|
|
1358
|
+
{
|
|
1359
|
+
"validatorId": "preset-maps-to-canonical-expression",
|
|
1360
|
+
"level": "error",
|
|
1361
|
+
"code": "PCRON006",
|
|
1362
|
+
"description": "Preset cron values must normalize into ScheduleAuthoringConfig and a valid canonical expression."
|
|
1363
|
+
},
|
|
1364
|
+
{
|
|
1365
|
+
"validatorId": "preview-matches-expression",
|
|
1366
|
+
"level": "error",
|
|
1367
|
+
"code": "PCRON007",
|
|
1368
|
+
"description": "Preview occurrences must be generated from the same expression, timezone and from-date requested by authoring."
|
|
1369
|
+
},
|
|
1370
|
+
{
|
|
1371
|
+
"validatorId": "invalid-schedules-return-diagnostics",
|
|
1372
|
+
"level": "error",
|
|
1373
|
+
"code": "PCRON008",
|
|
1374
|
+
"description": "Validation and preview requests for invalid schedules must return diagnostics and must not patch schedule/value fields."
|
|
1375
|
+
},
|
|
1376
|
+
{
|
|
1377
|
+
"validatorId": "diagnostics-before-patch",
|
|
1378
|
+
"level": "error",
|
|
1379
|
+
"code": "PCRON009",
|
|
1380
|
+
"description": "Operations that compile recurrence or presets must evaluate diagnostics before mutating canonical schedule/value paths."
|
|
1381
|
+
},
|
|
1382
|
+
{
|
|
1383
|
+
"validatorId": "editor-runtime-round-trip",
|
|
1384
|
+
"level": "error",
|
|
1385
|
+
"code": "PCRON010",
|
|
1386
|
+
"description": "ControlValueAccessor, runtime preview and AI adapter snapshots must preserve expression and timezone."
|
|
1387
|
+
}
|
|
1388
|
+
],
|
|
1389
|
+
"roundTripRequirements": [
|
|
1390
|
+
"Expression and timezone edits must round-trip through ControlValueAccessor, normalizeScheduleValue and createSchedulePreview without losing the selected timezone.",
|
|
1391
|
+
"Structured frequency authoring must use ScheduleAuthoringConfig and compileScheduleExpression as the canonical source of recurrence semantics.",
|
|
1392
|
+
"Validation and preview operations are read-only: invalid schedules return diagnostics and must not mutate schedule/value paths.",
|
|
1393
|
+
"Preset operations must resolve stable label/cron identities and validate the resulting expression before applying it.",
|
|
1394
|
+
"Preview generation must use the same expression, timezone, locale, occurrences and from-date that are visible in the schedule config or metadata input."
|
|
1395
|
+
],
|
|
1396
|
+
"examples": [
|
|
1397
|
+
{
|
|
1398
|
+
"id": "weekday-0800",
|
|
1399
|
+
"request": "Run every weekday at 08:00.",
|
|
1400
|
+
"operationId": "cron.frequency.set",
|
|
1401
|
+
"params": {
|
|
1402
|
+
"kind": "daily",
|
|
1403
|
+
"recurrence": {
|
|
1404
|
+
"daily": {
|
|
1405
|
+
"times": [
|
|
1406
|
+
"08:00"
|
|
1407
|
+
],
|
|
1408
|
+
"onlyWeekdays": true
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
"dialect": "unix"
|
|
1412
|
+
},
|
|
1413
|
+
"isPositive": true
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
"id": "every-15-minutes",
|
|
1417
|
+
"request": "Run every 15 minutes.",
|
|
1418
|
+
"operationId": "cron.frequency.set",
|
|
1419
|
+
"params": {
|
|
1420
|
+
"kind": "interval",
|
|
1421
|
+
"recurrence": {
|
|
1422
|
+
"interval": {
|
|
1423
|
+
"every": 15,
|
|
1424
|
+
"unit": "minutes"
|
|
1425
|
+
}
|
|
1426
|
+
},
|
|
1427
|
+
"dialect": "unix"
|
|
1428
|
+
},
|
|
1429
|
+
"isPositive": true
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
"id": "monthly-first-day",
|
|
1433
|
+
"request": "Run monthly on the first day at 09:00.",
|
|
1434
|
+
"operationId": "cron.frequency.set",
|
|
1435
|
+
"params": {
|
|
1436
|
+
"kind": "monthly",
|
|
1437
|
+
"recurrence": {
|
|
1438
|
+
"monthly": {
|
|
1439
|
+
"mode": "dayOfMonth",
|
|
1440
|
+
"dayOfMonth": 1,
|
|
1441
|
+
"times": [
|
|
1442
|
+
"09:00"
|
|
1443
|
+
]
|
|
1444
|
+
}
|
|
1445
|
+
},
|
|
1446
|
+
"dialect": "unix"
|
|
1447
|
+
},
|
|
1448
|
+
"isPositive": true
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
"id": "set-explicit-expression",
|
|
1452
|
+
"request": "Use cron expression 0 8 * * 1-5.",
|
|
1453
|
+
"operationId": "cron.expression.set",
|
|
1454
|
+
"params": {
|
|
1455
|
+
"cron": "0 8 * * 1-5",
|
|
1456
|
+
"dialect": "unix",
|
|
1457
|
+
"seconds": false
|
|
1458
|
+
},
|
|
1459
|
+
"isPositive": true
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"id": "change-timezone-preview",
|
|
1463
|
+
"request": "Change timezone to America/Sao_Paulo and preview the next runs.",
|
|
1464
|
+
"operationId": "cron.timezone.set",
|
|
1465
|
+
"params": {
|
|
1466
|
+
"timezone": "America/Sao_Paulo"
|
|
1467
|
+
},
|
|
1468
|
+
"isPositive": true
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"id": "preview-next-five",
|
|
1472
|
+
"request": "Preview the next five runs from 2026-04-20T00:00:00Z.",
|
|
1473
|
+
"operationId": "cron.preview.generate",
|
|
1474
|
+
"params": {
|
|
1475
|
+
"occurrences": 5,
|
|
1476
|
+
"from": "2026-04-20T00:00:00.000Z",
|
|
1477
|
+
"timezone": "UTC"
|
|
1478
|
+
},
|
|
1479
|
+
"isPositive": true
|
|
1480
|
+
},
|
|
1481
|
+
{
|
|
1482
|
+
"id": "apply-business-hours-preset",
|
|
1483
|
+
"request": "Apply the business hours preset.",
|
|
1484
|
+
"operationId": "cron.preset.apply",
|
|
1485
|
+
"target": "business hours",
|
|
1486
|
+
"params": {
|
|
1487
|
+
"labelOrCron": "business hours"
|
|
1488
|
+
},
|
|
1489
|
+
"isPositive": true
|
|
1490
|
+
},
|
|
1491
|
+
{
|
|
1492
|
+
"id": "reject-impossible-expression",
|
|
1493
|
+
"request": "Use cron expression 99 99 * * *.",
|
|
1494
|
+
"operationId": "cron.expression.set",
|
|
1495
|
+
"params": {
|
|
1496
|
+
"cron": "99 99 * * *",
|
|
1497
|
+
"dialect": "unix"
|
|
1498
|
+
},
|
|
1499
|
+
"isPositive": false
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
"id": "diagnose-invalid-expression",
|
|
1503
|
+
"request": "Validate 99 99 * * * and explain why it is invalid.",
|
|
1504
|
+
"operationId": "cron.validate",
|
|
1505
|
+
"params": {
|
|
1506
|
+
"cron": "99 99 * * *",
|
|
1507
|
+
"dialect": "unix"
|
|
1508
|
+
},
|
|
1509
|
+
"isPositive": true
|
|
1510
|
+
},
|
|
1511
|
+
{
|
|
1512
|
+
"id": "reject-invalid-timezone",
|
|
1513
|
+
"request": "Change timezone to Mars/Olympus.",
|
|
1514
|
+
"operationId": "cron.timezone.set",
|
|
1515
|
+
"params": {
|
|
1516
|
+
"timezone": "Mars/Olympus"
|
|
1517
|
+
},
|
|
1518
|
+
"isPositive": false
|
|
1519
|
+
}
|
|
1520
|
+
]
|
|
1521
|
+
},
|
|
1522
|
+
"chunks": [
|
|
1523
|
+
{
|
|
1524
|
+
"chunkIndex": 0,
|
|
1525
|
+
"chunkKind": "summary",
|
|
1526
|
+
"content": "Component ID: pdx-cron-builder\nSelector: pdx-cron-builder\nFriendly Name: Praxis Cron Builder\nDescription: Visual editor for CRON expressions.\nCategory: builder\nLib/Package: @praxisui/cron-builder\nTags: widget, cron, configurable\nInputs:\n - metadata (CronBuilderMetadata)\n",
|
|
1527
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/praxis-cron-builder.metadata.ts",
|
|
1528
|
+
"contentHash": "01b36482dbe7a48bb179ff03252b82caa3f03763e1e6e76cb78d1197f722007c",
|
|
1529
|
+
"sourceKind": "component_definition",
|
|
1530
|
+
"sourceId": "pdx-cron-builder",
|
|
1531
|
+
"corpusVersion": "1.0.0"
|
|
1532
|
+
},
|
|
1533
|
+
{
|
|
1534
|
+
"chunkIndex": 1,
|
|
1535
|
+
"chunkKind": "capabilities",
|
|
1536
|
+
"content": "Component Capability:\n - Path: label\n Category: meta\n Kind: string\n Description: Field label (if exposed by host).\n\nComponent Capability:\n - Path: hint\n Category: ui\n Kind: string\n Description: Helper text (if exposed by host).\n\nComponent Capability:\n - Path: enableSeconds\n Category: fields\n Kind: boolean\n Description: Enable seconds selector.\n\nComponent Capability:\n - Path: presets\n Category: presets\n Kind: array\n Description: Presets list (label + cron).\n\nComponent Capability:\n - Path: presets[].label\n Category: presets\n Kind: string\n Description: Preset label.\n\nComponent Capability:\n - Path: presets[].cron\n Category: presets\n Kind: string\n Description: Preset cron expression.\n\nComponent Capability:\n - Path: metadata\n Category: meta\n Kind: object\n Description: CronBuilderMetadata input.\n\nComponent Capability:\n - Path: metadata.mode\n Category: behavior\n Kind: enum\n Description: Enabled UI modes.\n\nComponent Capability:\n - Path: metadata.fields\n Category: fields\n Kind: object\n Description: Field visibility toggles.\n\nComponent Capability:\n - Path: metadata.fields.seconds\n Category: fields\n Kind: boolean\n Description: Show seconds field.\n\nComponent Capability:\n - Path: metadata.fields.minutes\n Category: fields\n Kind: boolean\n Description: Show minutes field.\n\nComponent Capability:\n - Path: metadata.fields.hours\n Category: fields\n Kind: boolean\n Description: Show hours field.\n\nComponent Capability:\n - Path: metadata.fields.dom\n Category: fields\n Kind: boolean\n Description: Show day-of-month field.\n\nComponent Capability:\n - Path: metadata.fields.month\n Category: fields\n Kind: boolean\n Description: Show month field.\n\nComponent Capability:\n - Path: metadata.fields.dow\n Category: fields\n Kind: boolean\n Description: Show day-of-week field.\n\nComponent Capability:\n - Path: metadata.timezone\n Category: i18n\n Kind: string\n Description: IANA timezone used for preview.\n\nComponent Capability:\n - Path: metadata.locale\n Category: i18n\n Kind: string\n Description: Locale used for humanized text.\n\nComponent Capability:\n - Path: metadata.presets\n Category: presets\n Kind: array\n Description: Presets list inside metadata.\n\nComponent Capability:\n - Path: metadata.presets[].label\n Category: presets\n Kind: string\n Description: Preset label.\n\nComponent Capability:\n - Path: metadata.presets[].cron\n Category: presets\n Kind: string\n Description: Preset cron expression.\n\nComponent Capability:\n - Path: metadata.previewOccurrences\n Category: preview\n Kind: number\n Description: Number of preview dates.\n\nComponent Capability:\n - Path: metadata.previewFrom\n Category: preview\n Kind: string\n Description: Preview start date (ISO string).\n\nComponent Capability:\n - Path: metadata.validators\n Category: validation\n Kind: object\n Description: Custom validation messages.\n\nComponent Capability:\n - Path: metadata.validators.requiredMessage\n Category: validation\n Kind: string\n Description: Required message.\n\nComponent Capability:\n - Path: metadata.validators.invalidCronMessage\n Category: validation\n Kind: string\n Description: Invalid cron message.\n\nComponent Capability:\n - Path: metadata.validationTrigger\n Category: validation\n Kind: enum\n Description: Validation trigger.\n\nComponent Capability:\n - Path: metadata.validationDebounce\n Category: validation\n Kind: number\n Description: Validation debounce (ms).\n\nComponent Capability:\n - Path: metadata.errorPosition\n Category: ui\n Kind: enum\n Description: Error display position.\n\nComponent Capability:\n - Path: metadata.showInlineErrors\n Category: ui\n Kind: boolean\n Description: Show inline errors.\n\nComponent Capability:\n - Path: metadata.hint\n Category: ui\n Kind: string\n Description: Hint text.\n\nComponent Capability:\n - Path: schedule\n Category: schedule\n Kind: object\n Description: Canonical scheduler authoring config.\n\nComponent Capability:\n - Path: schedule.kind\n Category: schedule\n Kind: enum\n Description: Business schedule intent.\n\nComponent Capability:\n - Path: schedule.timezone\n Category: i18n\n Kind: string\n Description: IANA timezone used by the schedule.\n\nComponent Capability:\n - Path: schedule.locale\n Category: i18n\n Kind: string\n Description: Locale used by humanized text and preview.\n\nComponent Capability:\n - Path: schedule.expression\n Category: dialects\n Kind: object\n Description: Technical CRON representation.\n\nComponent Capability:\n - Path: schedule.expression.cron\n Category: dialects\n Kind: string\n Description: CRON expression for custom or compiled schedules.\n\nComponent Capability:\n - Path: schedule.expression.dialect\n Category: dialects\n Kind: enum\n Description: CRON dialect family.\n\nComponent Capability:\n - Path: schedule.expression.seconds\n Category: dialects\n Kind: boolean\n Description: Whether the CRON representation includes seconds.\n\nComponent Capability:\n - Path: schedule.recurrence\n Category: recurrence\n Kind: object\n Description: Structured recurrence intent.\n\nComponent Capability:\n - Path: schedule.recurrence.once.runAt\n Category: recurrence\n Kind: string\n Description: ISO date-time for one-time schedules.\n\nComponent Capability:\n - Path: schedule.recurrence.interval.every\n Category: recurrence\n Kind: number\n Description: Interval amount.\n\nComponent Capability:\n - Path: schedule.recurrence.interval.unit\n Category: recurrence\n Kind: enum\n Description: Interval unit.\n\nComponent Capability:\n - Path: schedule.recurrence.daily.times\n Category: recurrence\n Kind: array\n Description: Daily run times in HH:mm format.\n\nComponent Capability:\n - Path: schedule.recurrence.daily.onlyWeekdays\n Category: recurrence\n Kind: boolean\n Description: Limit daily schedule to Monday through Friday.\n\nComponent Capability:\n - Path: schedule.recurrence.weekly.daysOfWeek\n Category: recurrence\n Kind: array\n Description: Weekdays as numbers where 0 is Sunday.\n\nComponent Capability:\n - Path: schedule.recurrence.weekly.times\n Category: recurrence\n Kind: array\n Description: Weekly run times in HH:mm format.\n\nComponent Capability:\n - Path: schedule.recurrence.monthly.mode\n Category: recurrence\n Kind: enum\n Description: Monthly recurrence strategy.\n\nComponent Capability:\n - Path: schedule.recurrence.monthly.dayOfMonth\n Category: recurrence\n Kind: number\n Description: Day of month for monthly schedules.\n\nComponent Capability:\n - Path: schedule.recurrence.monthly.nth\n Category: recurrence\n Kind: number\n Description: Nth weekday occurrence in the month.\n\nComponent Capability:\n - Path: schedule.recurrence.monthly.weekday\n Category: recurrence\n Kind: number\n Description: Weekday for nth weekday monthly schedules.\n\nComponent Capability:\n - Path: schedule.recurrence.monthly.times\n Category: recurrence\n Kind: array\n Description: Monthly run times in HH:mm format.\n\nComponent Capability:\n - Path: schedule.window.startAt\n Category: policy\n Kind: string\n Description: ISO start date-time for schedule validity.\n\nComponent Capability:\n - Path: schedule.window.endAt\n Category: policy\n Kind: string\n Description: ISO end date-time for schedule validity.\n\nComponent Capability:\n - Path: schedule.executionPolicy.enabled\n Category: policy\n Kind: boolean\n Description: Whether the schedule is active.\n\nComponent Capability:\n - Path: schedule.executionPolicy.misfirePolicy\n Category: policy\n Kind: enum\n Description: Policy for missed scheduled runs.\n\nComponent Capability:\n - Path: schedule.executionPolicy.concurrencyPolicy\n Category: policy\n Kind: enum\n Description: Policy for overlapping runs.",
|
|
1537
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/praxis-cron-builder.metadata.ts",
|
|
1538
|
+
"contentHash": "3a0720967b428e63db845a8ad2126711488b0ab14ec1455010ab095840f208b6",
|
|
1539
|
+
"sourceKind": "component_definition",
|
|
1540
|
+
"sourceId": "pdx-cron-builder",
|
|
1541
|
+
"corpusVersion": "1.0.0"
|
|
1542
|
+
},
|
|
1543
|
+
{
|
|
1544
|
+
"chunkIndex": 2,
|
|
1545
|
+
"chunkKind": "capabilities",
|
|
1546
|
+
"content": "Component Capability:\n - Path: schedule.executionPolicy.flexibleWindowMinutes\n Category: policy\n Kind: number\n Description: Flexible delivery window in minutes.\n\nComponent Capability:\n - Path: schedule.executionPolicy.jitterMinutes\n Category: policy\n Kind: number\n Description: Randomized delay window in minutes.\n\nComponent Capability:\n - Path: schedule.preview.occurrences\n Category: preview\n Kind: number\n Description: Number of occurrences to preview.\n\nComponent Capability:\n - Path: schedule.preview.from\n Category: preview\n Kind: string\n Description: ISO date-time used as preview start.\n\nComponent Capability:\n - Path: schedule.governance.name\n Category: governance\n Kind: string\n Description: Schedule name.\n\nComponent Capability:\n - Path: schedule.governance.description\n Category: governance\n Kind: string\n Description: Schedule description.\n\nComponent Capability:\n - Path: schedule.governance.owner\n Category: governance\n Kind: string\n Description: Schedule owner.\n\nComponent Capability:\n - Path: schedule.governance.tags\n Category: governance\n Kind: array\n Description: Governance tags.\n\nComponent Capability:\n - Path: diagnostics\n Category: validation\n Kind: array\n Description: Read-only structured schedule diagnostics.\n\nComponent Capability:\n - Path: preview\n Category: preview\n Kind: array\n Description: Read-only structured preview occurrences.\n\nCapability Note:\n - presets[] should be merged by cron or label to avoid replacing all entries.\n\nCapability Note:\n - metadata.previewFrom expects an ISO date string when provided.\n\nCapability Note:\n - schedule is the canonical scheduler authoring state; value remains the current CRON string compatibility surface.\n\nCapability Note:\n - Prefer schedule.kind and schedule.recurrence for business intent; use schedule.expression.cron only for custom CRON edits.",
|
|
1547
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/praxis-cron-builder.metadata.ts",
|
|
1548
|
+
"contentHash": "7e087ed984d390a3bc1e8addd28443f3d0b648e370e25a6265c3507e0a57d500",
|
|
1549
|
+
"sourceKind": "component_definition",
|
|
1550
|
+
"sourceId": "pdx-cron-builder",
|
|
1551
|
+
"corpusVersion": "1.0.0"
|
|
1552
|
+
},
|
|
1553
|
+
{
|
|
1554
|
+
"chunkIndex": 3,
|
|
1555
|
+
"chunkKind": "authoring_manifest",
|
|
1556
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"identity\"}",
|
|
1557
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1558
|
+
"contentHash": "1cceaf90502599b642b54b358b030a6dc7d00034a78f382731db98bb7be25633",
|
|
1559
|
+
"sourceKind": "component_definition",
|
|
1560
|
+
"sourceId": "pdx-cron-builder",
|
|
1561
|
+
"corpusVersion": "1.0.0"
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"chunkIndex": 4,
|
|
1565
|
+
"chunkKind": "authoring_manifest",
|
|
1566
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"metadata\",\"type\":\"CronBuilderMetadata\",\"description\":\"Builder UI, timezone, locale, presets, validation and preview configuration.\"},{\"name\":\"value\",\"type\":\"string | ScheduleAuthoringConfig\",\"description\":\"Current CRON string compatibility value or canonical schedule authoring config.\"},{\"name\":\"disabled\",\"type\":\"boolean\",\"description\":\"ControlValueAccessor disabled state.\"}]}",
|
|
1567
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1568
|
+
"contentHash": "b60f42440aa8331cf6c99df0ea132dbf26b75c01faef938e27e109b4331be6f1",
|
|
1569
|
+
"sourceKind": "component_definition",
|
|
1570
|
+
"sourceId": "pdx-cron-builder",
|
|
1571
|
+
"corpusVersion": "1.0.0"
|
|
1572
|
+
},
|
|
1573
|
+
{
|
|
1574
|
+
"chunkIndex": 5,
|
|
1575
|
+
"chunkKind": "authoring_manifest",
|
|
1576
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"description\":\"Canonical CRON expression under schedule.expression or legacy value.\"},{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"description\":\"Business recurrence intent compiled into a canonical expression.\"},{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"description\":\"IANA timezone used for preview and schedule metadata.\"},{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"description\":\"Read-only preview generation request for next occurrences.\"},{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"description\":\"Read-only validation diagnostics request for expression or schedule config.\"},{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"description\":\"Preset entry in metadata.presets[] or top-level presets[].\"}]}",
|
|
1577
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1578
|
+
"contentHash": "8f10562e6b45133a9138f9612a39e24bcd520fb6687594732b46e7db468914e8",
|
|
1579
|
+
"sourceKind": "component_definition",
|
|
1580
|
+
"sourceId": "pdx-cron-builder",
|
|
1581
|
+
"corpusVersion": "1.0.0"
|
|
1582
|
+
},
|
|
1583
|
+
{
|
|
1584
|
+
"chunkIndex": 6,
|
|
1585
|
+
"chunkKind": "authoring_manifest",
|
|
1586
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.expression.set\",\"title\":\"Set CRON expression\",\"scope\":\"global\",\"targetKind\":\"expression\",\"target\":{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-expression-set\",\"handlerContract\":{\"reads\":[\"schedule.expression\",\"schedule.timezone\",\"metadata.timezone\",\"value\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"value\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.expression.dialect\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-dialect\",\"seconds-field-mismatch\"],\"description\":\"Validates and normalizes an explicit CRON expression before writing schedule.expression and the compatibility value.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"cron-expression-valid\",\"cron-dialect-compatible\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.expression.cron\",\"schedule.expression.dialect\",\"schedule.expression.seconds\",\"value\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.frequency.set\",\"title\":\"Set schedule frequency\",\"scope\":\"global\",\"targetKind\":\"frequency\",\"target\":{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-frequency-to-expression\",\"handlerContract\":{\"reads\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.timezone\",\"schedule.expression.dialect\"],\"writes\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"identityKeys\":[\"schedule.kind\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"unsupported-kind\",\"non-portable-frequency\",\"invalid-recurrence\",\"cron-compile-failed\"],\"description\":\"Compiles structured recurrence intent through compileScheduleExpression and updates the canonical schedule expression only when diagnostics have no errors.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"frequency-maps-to-canonical-expression\",\"cron-expression-valid\",\"diagnostics-before-patch\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.timezone.set\",\"title\":\"Set schedule timezone\",\"scope\":\"global\",\"targetKind\":\"timezone\",\"target\":{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-timezone-set\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.locale\"],\"writes\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-timezone\",\"invalid-expression\",\"preview-generation-failed\"],\"description\":\"Sets the IANA timezone used by schedule and metadata, then regenerates preview/diagnostics from the same expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"timezone-valid\",\"preview-matches-expression\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.preset.apply\",\"title\":\"Apply CRON preset\",\"scope\":\"meta\",\"targetKind\":\"preset\",\"target\":{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preset-apply\",\"handlerContract\":{\"reads\":[\"metadata.presets[]\",\"presets[]\",\"schedule.timezone\",\"metadata.timezone\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"identityKeys\":[\"metadata.presets[].label\",\"metadata.presets[].cron\",\"presets[].label\",\"presets[].cron\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"preset-not-found\",\"preset-cron-invalid\",\"timezone-invalid\"],\"description\":\"Resolves a preset by label or cron, validates it through normalizeScheduleValue/createSchedulePreview, then applies the canonical expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preset-exists\",\"preset-maps-to-canonical-expression\",\"cron-expression-valid\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-preset-exists\"]},{\"operationId\":\"cron.validate\",\"title\":\"Validate schedule\",\"scope\":\"global\",\"targetKind\":\"validation\",\"target\":{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-validation-diagnostics\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\"],\"writes\":[\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"invalid-recurrence\"],\"description\":\"Runs normalizeScheduleValue and validateScheduleAuthoringConfig and returns diagnostics without mutating schedule/value paths.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"invalid-schedules-return-diagnostics\",\"cron-expression-valid\",\"timezone-valid\"],\"affectedPaths\":[\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
1587
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1588
|
+
"contentHash": "5094fa50447e85bdfd42baa413f8dd551d6841e35949f6e11ee2a6b3b42eb40e",
|
|
1589
|
+
"sourceKind": "component_definition",
|
|
1590
|
+
"sourceId": "pdx-cron-builder",
|
|
1591
|
+
"corpusVersion": "1.0.0"
|
|
1592
|
+
},
|
|
1593
|
+
{
|
|
1594
|
+
"chunkIndex": 7,
|
|
1595
|
+
"chunkKind": "authoring_manifest",
|
|
1596
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.preview.generate\",\"title\":\"Generate schedule preview\",\"scope\":\"global\",\"targetKind\":\"preview\",\"target\":{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preview-generate\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.timezone\",\"metadata.locale\"],\"writes\":[\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\",\"metadata.previewFrom\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"preview-empty\",\"diagnostics-contain-errors\"],\"description\":\"Runs createSchedulePreview and returns read-only preview occurrences plus diagnostics; it does not patch the schedule when validation fails.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preview-matches-expression\",\"timezone-valid\",\"invalid-schedules-return-diagnostics\"],\"affectedPaths\":[\"preview\",\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
1597
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1598
|
+
"contentHash": "3ec65ef1ec816f60eeadfbc01e268eab0c01b67870adbcd7d576e4375993b9c0",
|
|
1599
|
+
"sourceKind": "component_definition",
|
|
1600
|
+
"sourceId": "pdx-cron-builder",
|
|
1601
|
+
"corpusVersion": "1.0.0"
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
"chunkIndex": 8,
|
|
1605
|
+
"chunkKind": "authoring_manifest",
|
|
1606
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"cron-expression-valid\",\"level\":\"error\",\"code\":\"PCRON001\",\"description\":\"CRON expressions must pass the canonical cron-runtime parser for the selected dialect before schedule/value paths are patched.\"},{\"validatorId\":\"cron-dialect-compatible\",\"level\":\"error\",\"code\":\"PCRON002\",\"description\":\"Field count, seconds support and dialect-specific rules must match CRON_DIALECTS.\"},{\"validatorId\":\"timezone-valid\",\"level\":\"error\",\"code\":\"PCRON003\",\"description\":\"Timezone must be a valid IANA timezone accepted by Intl.DateTimeFormat and schedule preview.\"},{\"validatorId\":\"frequency-maps-to-canonical-expression\",\"level\":\"error\",\"code\":\"PCRON004\",\"description\":\"Structured frequency intent must compile through compileScheduleExpression into the canonical expression when portable.\"},{\"validatorId\":\"preset-exists\",\"level\":\"error\",\"code\":\"PCRON005\",\"description\":\"Preset operations must resolve an existing preset by label or cron expression.\"},{\"validatorId\":\"preset-maps-to-canonical-expression\",\"level\":\"error\",\"code\":\"PCRON006\",\"description\":\"Preset cron values must normalize into ScheduleAuthoringConfig and a valid canonical expression.\"},{\"validatorId\":\"preview-matches-expression\",\"level\":\"error\",\"code\":\"PCRON007\",\"description\":\"Preview occurrences must be generated from the same expression, timezone and from-date requested by authoring.\"},{\"validatorId\":\"invalid-schedules-return-diagnostics\",\"level\":\"error\",\"code\":\"PCRON008\",\"description\":\"Validation and preview requests for invalid schedules must return diagnostics and must not patch schedule/value fields.\"},{\"validatorId\":\"diagnostics-before-patch\",\"level\":\"error\",\"code\":\"PCRON009\",\"description\":\"Operations that compile recurrence or presets must evaluate diagnostics before mutating canonical schedule/value paths.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PCRON010\",\"description\":\"ControlValueAccessor, runtime preview and AI adapter snapshots must preserve expression and timezone.\"}]}",
|
|
1607
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1608
|
+
"contentHash": "a322028cf5c54617a0719470bdd1445a08b77de7ba8e853ea0da9fe041c58718",
|
|
1609
|
+
"sourceKind": "component_definition",
|
|
1610
|
+
"sourceId": "pdx-cron-builder",
|
|
1611
|
+
"corpusVersion": "1.0.0"
|
|
1612
|
+
},
|
|
1613
|
+
{
|
|
1614
|
+
"chunkIndex": 9,
|
|
1615
|
+
"chunkKind": "authoring_manifest",
|
|
1616
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"Expression and timezone edits must round-trip through ControlValueAccessor, normalizeScheduleValue and createSchedulePreview without losing the selected timezone.\",\"Structured frequency authoring must use ScheduleAuthoringConfig and compileScheduleExpression as the canonical source of recurrence semantics.\",\"Validation and preview operations are read-only: invalid schedules return diagnostics and must not mutate schedule/value paths.\",\"Preset operations must resolve stable label/cron identities and validate the resulting expression before applying it.\",\"Preview generation must use the same expression, timezone, locale, occurrences and from-date that are visible in the schedule config or metadata input.\"]}",
|
|
1617
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1618
|
+
"contentHash": "d6ff2c3f72db53d541a11ffb0d2c9c06734c5a7c54a9bd356242d94fe7d01a84",
|
|
1619
|
+
"sourceKind": "component_definition",
|
|
1620
|
+
"sourceId": "pdx-cron-builder",
|
|
1621
|
+
"corpusVersion": "1.0.0"
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"chunkIndex": 10,
|
|
1625
|
+
"chunkKind": "authoring_manifest",
|
|
1626
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"weekday-0800\",\"request\":\"Run every weekday at 08:00.\",\"operationId\":\"cron.frequency.set\",\"params\":{\"kind\":\"daily\",\"recurrence\":{\"daily\":{\"times\":[\"08:00\"],\"onlyWeekdays\":true}},\"dialect\":\"unix\"},\"isPositive\":true},{\"id\":\"every-15-minutes\",\"request\":\"Run every 15 minutes.\",\"operationId\":\"cron.frequency.set\",\"params\":{\"kind\":\"interval\",\"recurrence\":{\"interval\":{\"every\":15,\"unit\":\"minutes\"}},\"dialect\":\"unix\"},\"isPositive\":true},{\"id\":\"monthly-first-day\",\"request\":\"Run monthly on the first day at 09:00.\",\"operationId\":\"cron.frequency.set\",\"params\":{\"kind\":\"monthly\",\"recurrence\":{\"monthly\":{\"mode\":\"dayOfMonth\",\"dayOfMonth\":1,\"times\":[\"09:00\"]}},\"dialect\":\"unix\"},\"isPositive\":true},{\"id\":\"set-explicit-expression\",\"request\":\"Use cron expression 0 8 * * 1-5.\",\"operationId\":\"cron.expression.set\",\"params\":{\"cron\":\"0 8 * * 1-5\",\"dialect\":\"unix\",\"seconds\":false},\"isPositive\":true},{\"id\":\"change-timezone-preview\",\"request\":\"Change timezone to America/Sao_Paulo and preview the next runs.\",\"operationId\":\"cron.timezone.set\",\"params\":{\"timezone\":\"America/Sao_Paulo\"},\"isPositive\":true},{\"id\":\"preview-next-five\",\"request\":\"Preview the next five runs from 2026-04-20T00:00:00Z.\",\"operationId\":\"cron.preview.generate\",\"params\":{\"occurrences\":5,\"from\":\"2026-04-20T00:00:00.000Z\",\"timezone\":\"UTC\"},\"isPositive\":true},{\"id\":\"apply-business-hours-preset\",\"request\":\"Apply the business hours preset.\",\"operationId\":\"cron.preset.apply\",\"target\":\"business hours\",\"params\":{\"labelOrCron\":\"business hours\"},\"isPositive\":true},{\"id\":\"reject-impossible-expression\",\"request\":\"Use cron expression 99 99 * * *.\",\"operationId\":\"cron.expression.set\",\"params\":{\"cron\":\"99 99 * * *\",\"dialect\":\"unix\"},\"isPositive\":false},{\"id\":\"diagnose-invalid-expression\",\"request\":\"Validate 99 99 * * * and explain why it is invalid.\",\"operationId\":\"cron.validate\",\"params\":{\"cron\":\"99 99 * * *\",\"dialect\":\"unix\"},\"isPositive\":true},{\"id\":\"reject-invalid-timezone\",\"request\":\"Change timezone to Mars/Olympus.\",\"operationId\":\"cron.timezone.set\",\"params\":{\"timezone\":\"Mars/Olympus\"},\"isPositive\":false}]}",
|
|
1627
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
|
|
1628
|
+
"contentHash": "26e54087a1ae0e3e1603db0d1e5baab27abacb8c65417525b6cd762ad1e79d2f",
|
|
1629
|
+
"sourceKind": "component_definition",
|
|
1630
|
+
"sourceId": "pdx-cron-builder",
|
|
1631
|
+
"corpusVersion": "1.0.0"
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"chunkIndex": 11,
|
|
1635
|
+
"chunkKind": "context_pack",
|
|
1636
|
+
"content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{},\"actionCatalog\":[{\"id\":\"label.set\",\"intentExamples\":[\"label\",\"rótulo\",\"titulo\"],\"patchTemplate\":{\"label\":\"{{value}}\"}},{\"id\":\"hint.set\",\"intentExamples\":[\"hint\",\"help\",\"ajuda\"],\"patchTemplate\":{\"hint\":\"{{value}}\"}},{\"id\":\"enableSeconds.enable\",\"intentExamples\":[\"seconds\",\"segundos\",\"enable seconds\"],\"patchTemplate\":{\"enableSeconds\":true}},{\"id\":\"enableSeconds.disable\",\"intentExamples\":[\"disable seconds\",\"sem segundos\"],\"patchTemplate\":{\"enableSeconds\":false}},{\"id\":\"preset.add\",\"intentExamples\":[\"add preset\",\"new preset\",\"preset\"],\"patchTemplate\":{\"presets\":[{\"label\":\"{{value}}\",\"cron\":\"{{target}}\"}]}},{\"id\":\"preset.label.set\",\"intentExamples\":[\"rename preset\",\"preset label\"],\"patchTemplate\":{\"presets\":[{\"cron\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"preset.cron.set\",\"intentExamples\":[\"preset cron\",\"cron expression\"],\"patchTemplate\":{\"presets\":[{\"label\":\"{{target}}\",\"cron\":\"{{value}}\"}]}},{\"id\":\"schedule.daily.set\",\"intentExamples\":[\"daily\",\"diario\",\"diário\",\"every day\"],\"patchTemplate\":{\"schedule\":{\"kind\":\"daily\",\"timezone\":\"{{timezone}}\",\"recurrence\":{\"daily\":{\"times\":[\"{{value}}\"]}}}}},{\"id\":\"schedule.weekdays.set\",\"intentExamples\":[\"weekdays\",\"dias uteis\",\"dias úteis\",\"monday to friday\"],\"patchTemplate\":{\"schedule\":{\"kind\":\"daily\",\"timezone\":\"{{timezone}}\",\"recurrence\":{\"daily\":{\"times\":[\"{{value}}\"],\"onlyWeekdays\":true}}}}},{\"id\":\"schedule.timezone.set\",\"intentExamples\":[\"timezone\",\"fuso\",\"fuso horario\",\"fuso horário\"],\"patchTemplate\":{\"schedule\":{\"timezone\":\"{{value}}\"}}},{\"id\":\"schedule.concurrency.set\",\"intentExamples\":[\"concurrency\",\"concorrencia\",\"concorrência\",\"overlap\"],\"patchTemplate\":{\"schedule\":{\"executionPolicy\":{\"concurrencyPolicy\":\"{{value}}\"}}}}],\"fieldResolvers\":{\"presets[]\":[\"label\",\"cron\"]},\"hints\":[\"Use presets[].label or presets[].cron as merge keys; avoid array indexes.\",\"Prefer schedule.kind plus schedule.recurrence for business intent; use schedule.expression.cron only when the user explicitly asks for custom CRON.\",\"Cron expressions should be validated with diagnostics before applying to production.\"]}}",
|
|
1637
|
+
"sourcePointer": "projects/praxis-cron-builder/src/lib/ai/cron-builder-context-pack.ts",
|
|
1638
|
+
"contentHash": "d392e6a6f0aa2a22ae43d1de15fa2cb6e5dbc62b61aa630b6c2a95010afe8029",
|
|
1639
|
+
"sourceKind": "component_definition",
|
|
1640
|
+
"sourceId": "pdx-cron-builder",
|
|
1641
|
+
"corpusVersion": "1.0.0"
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
"chunkIndex": 12,
|
|
1645
|
+
"chunkKind": "recipe",
|
|
1646
|
+
"content": "{\"_comment\":\"Recipe for pdx-cron-builder | controlType: cronBuilder\",\"templateMeta\":{\"registryKey\":\"praxis-cron-builder\",\"variantId\":\"base\",\"tags\":[\"dynamic-fields\",\"base\"],\"useWhen\":\"criar campo cronBuilder\",\"examplePrompts\":[\"crie um campo cronBuilder\",\"adicione um cronBuilder ao formulario\"]},\"fieldMetadata\":{\"name\":\"example_cronBuilder\",\"label\":\"Example cronBuilder\",\"placeholder\":\"example\",\"hint\":\"example\",\"tooltip\":\"example\",\"description\":\"example\",\"group\":\"example\",\"order\":1,\"width\":\"example\",\"isFlex\":true,\"controlType\":\"cronBuilder\",\"materialDesign\":{\"appearance\":\"fill\",\"color\":\"primary\",\"floatLabel\":\"auto\",\"subscriptSizing\":\"fixed\",\"hideRequiredMarker\":true,\"density\":\"comfortable\",\"disableRipple\":true,\"customPalette\":{\"example\":true},\"animations\":{\"example\":true}},\"prefixIcon\":\"example\",\"suffixIcon\":\"example\",\"iconPosition\":\"start\",\"iconSize\":\"small\",\"validators\":{\"example\":true,\"required\":true,\"email\":true,\"minLength\":1,\"maxLength\":1,\"min\":1,\"max\":1,\"pattern\":\"example\",\"minWords\":1,\"requiredChecked\":true},\"validationMode\":\"immediate\",\"debounceTime\":1,\"hidden\":true,\"visibleIn\":[\"form\"],\"formHidden\":true,\"tableHidden\":true,\"filterHidden\":true,\"dependencyFields\":[\"status\"],\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"active\"]},\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"active\"]},\"dependencyFilterMap\":{\"example\":true},\"dependencyValuePath\":\"example\",\"dependencyMergeStrategy\":\"replace\",\"dependencyLoadOnChange\":\"respectLoadOn\",\"resetOnDependentChange\":true,\"dependencyDebounceMs\":1,\"transformDisplayValue\":\"formValue.status == 'active'\",\"transformSaveValue\":\"formValue.status == 'active'\",\"textTransformApply\":\"displayOnly\",\"inlineEditing\":true,\"unique\":true,\"readOnly\":true,\"disabled\":true,\"defaultValue\":\"default\",\"ariaLabel\":\"example\",\"ariaDescribedBy\":\"example\"}}",
|
|
1647
|
+
"sourcePointer": "examples/ai-recipes/praxis-cron-builder/pdx-cron-builder.json",
|
|
1648
|
+
"contentHash": "16235ce541001c7acf6275007481db41d8705d8422e337d20b7c27c8411491f3",
|
|
1649
|
+
"sourceKind": "component_definition",
|
|
1650
|
+
"sourceId": "pdx-cron-builder",
|
|
1651
|
+
"corpusVersion": "1.0.0"
|
|
1652
|
+
}
|
|
1653
|
+
]
|
|
1654
|
+
}
|
|
1655
|
+
},
|
|
1656
|
+
"note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
|
|
1657
|
+
}
|