@polpo-ai/core 0.15.44 → 0.15.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +11 -2
  2. package/dist/__tests__/guardrail-engine.test.js +41 -1
  3. package/dist/__tests__/guardrail-engine.test.js.map +1 -1
  4. package/dist/__tests__/task-runner-guardrail-events.test.d.ts +2 -0
  5. package/dist/__tests__/task-runner-guardrail-events.test.d.ts.map +1 -0
  6. package/dist/__tests__/task-runner-guardrail-events.test.js +130 -0
  7. package/dist/__tests__/task-runner-guardrail-events.test.js.map +1 -0
  8. package/dist/adapter.d.ts +5 -1
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/events.d.ts +7 -0
  11. package/dist/events.d.ts.map +1 -1
  12. package/dist/guardrails/index.d.ts +1 -1
  13. package/dist/guardrails/index.d.ts.map +1 -1
  14. package/dist/guardrails/index.js +1 -1
  15. package/dist/guardrails/index.js.map +1 -1
  16. package/dist/guardrails/tool-middleware.d.ts +9 -0
  17. package/dist/guardrails/tool-middleware.d.ts.map +1 -1
  18. package/dist/guardrails/tool-middleware.js +31 -1
  19. package/dist/guardrails/tool-middleware.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/mission-executor.d.ts +8 -2
  25. package/dist/mission-executor.d.ts.map +1 -1
  26. package/dist/mission-executor.js.map +1 -1
  27. package/dist/orchestrator-engine.d.ts +4 -0
  28. package/dist/orchestrator-engine.d.ts.map +1 -1
  29. package/dist/orchestrator-engine.js.map +1 -1
  30. package/dist/scheduling/dispatcher.d.ts +45 -0
  31. package/dist/scheduling/dispatcher.d.ts.map +1 -0
  32. package/dist/scheduling/dispatcher.js +201 -0
  33. package/dist/scheduling/dispatcher.js.map +1 -0
  34. package/dist/scheduling/dispatcher.test.d.ts +2 -0
  35. package/dist/scheduling/dispatcher.test.d.ts.map +1 -0
  36. package/dist/scheduling/dispatcher.test.js +378 -0
  37. package/dist/scheduling/dispatcher.test.js.map +1 -0
  38. package/dist/scheduling/driver.d.ts +15 -0
  39. package/dist/scheduling/driver.d.ts.map +1 -0
  40. package/dist/scheduling/driver.js +2 -0
  41. package/dist/scheduling/driver.js.map +1 -0
  42. package/dist/scheduling/index.d.ts +9 -0
  43. package/dist/scheduling/index.d.ts.map +1 -0
  44. package/dist/scheduling/index.js +8 -0
  45. package/dist/scheduling/index.js.map +1 -0
  46. package/dist/scheduling/occurrence.d.ts +17 -0
  47. package/dist/scheduling/occurrence.d.ts.map +1 -0
  48. package/dist/scheduling/occurrence.js +164 -0
  49. package/dist/scheduling/occurrence.js.map +1 -0
  50. package/dist/scheduling/occurrence.test.d.ts +2 -0
  51. package/dist/scheduling/occurrence.test.d.ts.map +1 -0
  52. package/dist/scheduling/occurrence.test.js +148 -0
  53. package/dist/scheduling/occurrence.test.js.map +1 -0
  54. package/dist/scheduling/state-machine.d.ts +10 -0
  55. package/dist/scheduling/state-machine.d.ts.map +1 -0
  56. package/dist/scheduling/state-machine.js +36 -0
  57. package/dist/scheduling/state-machine.js.map +1 -0
  58. package/dist/scheduling/state-machine.test.d.ts +2 -0
  59. package/dist/scheduling/state-machine.test.d.ts.map +1 -0
  60. package/dist/scheduling/state-machine.test.js +77 -0
  61. package/dist/scheduling/state-machine.test.js.map +1 -0
  62. package/dist/scheduling/store.d.ts +100 -0
  63. package/dist/scheduling/store.d.ts.map +1 -0
  64. package/dist/scheduling/store.js +635 -0
  65. package/dist/scheduling/store.js.map +1 -0
  66. package/dist/scheduling/store.test.d.ts +2 -0
  67. package/dist/scheduling/store.test.d.ts.map +1 -0
  68. package/dist/scheduling/store.test.js +462 -0
  69. package/dist/scheduling/store.test.js.map +1 -0
  70. package/dist/scheduling/types.d.ts +195 -0
  71. package/dist/scheduling/types.d.ts.map +1 -0
  72. package/dist/scheduling/types.js +2 -0
  73. package/dist/scheduling/types.js.map +1 -0
  74. package/dist/scheduling/validation.d.ts +28 -0
  75. package/dist/scheduling/validation.d.ts.map +1 -0
  76. package/dist/scheduling/validation.js +614 -0
  77. package/dist/scheduling/validation.js.map +1 -0
  78. package/dist/scheduling/validation.test.d.ts +2 -0
  79. package/dist/scheduling/validation.test.d.ts.map +1 -0
  80. package/dist/scheduling/validation.test.js +576 -0
  81. package/dist/scheduling/validation.test.js.map +1 -0
  82. package/dist/task-runner.d.ts +1 -0
  83. package/dist/task-runner.d.ts.map +1 -1
  84. package/dist/task-runner.js +38 -0
  85. package/dist/task-runner.js.map +1 -1
  86. package/dist/types/agent.d.ts +8 -0
  87. package/dist/types/agent.d.ts.map +1 -1
  88. package/dist/types/agent.js.map +1 -1
  89. package/dist/types/config.d.ts +5 -0
  90. package/dist/types/config.d.ts.map +1 -1
  91. package/dist/types/config.js.map +1 -1
  92. package/dist/types/mission.d.ts +13 -3
  93. package/dist/types/mission.d.ts.map +1 -1
  94. package/package.json +6 -1
@@ -0,0 +1,614 @@
1
+ export const SCHEDULE_LIMITS = Object.freeze({
2
+ idLength: 256,
3
+ nameLength: 200,
4
+ descriptionLength: 2_000,
5
+ promptLength: 128_000,
6
+ messageCount: 100,
7
+ metadataBytes: 16_384,
8
+ metadataDepth: 12,
9
+ metadataNodes: 1_000,
10
+ maxConcurrency: 100,
11
+ maxMisfireGraceSeconds: 7 * 24 * 60 * 60,
12
+ });
13
+ const DEFAULT_POLICY = Object.freeze({
14
+ catchUp: "skip",
15
+ misfireGraceSeconds: 300,
16
+ maxConcurrency: 1,
17
+ });
18
+ const ISO_TIMESTAMP_WITH_OFFSET = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/;
19
+ const CRON_FIELD_RANGES = [
20
+ [0, 59],
21
+ [0, 23],
22
+ [1, 31],
23
+ [1, 12],
24
+ [0, 7],
25
+ ];
26
+ const FORBIDDEN_JSON_KEYS = new Set(["__proto__", "prototype", "constructor"]);
27
+ export function normalizeCronExpression(value) {
28
+ const expression = requiredString(value, "Schedule cron expression", 512);
29
+ const fields = expression.split(/\s+/);
30
+ if (fields.length !== 5) {
31
+ throw new Error(`Invalid schedule cron expression: expected 5 fields, got ${fields.length}`);
32
+ }
33
+ fields.forEach((field, index) => {
34
+ validateCronField(field, CRON_FIELD_RANGES[index][0], CRON_FIELD_RANGES[index][1]);
35
+ });
36
+ return fields.join(" ");
37
+ }
38
+ export function normalizeScheduleTiming(value, options = {}) {
39
+ const timing = record(value, "Schedule timing");
40
+ const kind = timing.kind;
41
+ if (kind === "cron") {
42
+ assertKnownKeys(timing, ["kind", "expression", "timezone"], "Schedule cron timing");
43
+ return {
44
+ kind,
45
+ expression: normalizeCronExpression(timing.expression),
46
+ timezone: normalizeTimezone(timing.timezone),
47
+ };
48
+ }
49
+ if (kind === "once") {
50
+ assertKnownKeys(timing, ["kind", "at", "timezone"], "Schedule once timing");
51
+ const at = normalizeTimestamp(timing.at, "Schedule once timing at");
52
+ const now = normalizeNow(options.now);
53
+ if (!options.allowPastOnce && Date.parse(at) <= now.getTime()) {
54
+ throw new Error("Schedule once timing must be in the future");
55
+ }
56
+ return {
57
+ kind,
58
+ at,
59
+ timezone: normalizeTimezone(timing.timezone),
60
+ };
61
+ }
62
+ throw new Error('Schedule timing kind must be "cron" or "once"');
63
+ }
64
+ export function normalizeScheduleInvocation(value) {
65
+ const invocation = record(value, "Schedule invocation");
66
+ switch (invocation.surface) {
67
+ case "agent":
68
+ return normalizeAgentInvocation(invocation);
69
+ case "task":
70
+ return normalizeTaskInvocation(invocation);
71
+ case "channel":
72
+ return normalizeChannelInvocation(invocation);
73
+ case "webhook":
74
+ return normalizeWebhookInvocation(invocation);
75
+ case "legacy_mission":
76
+ return normalizeLegacyMissionInvocation(invocation);
77
+ default:
78
+ throw new Error("Schedule invocation surface must be agent, task, channel, webhook, or legacy_mission");
79
+ }
80
+ }
81
+ export function normalizeCreateScheduleInput(value, options = {}) {
82
+ const input = record(value, "Schedule create input");
83
+ assertKnownKeys(input, ["id", "name", "description", "timing", "invocation", "status", "policy", "metadata"], "Schedule create input");
84
+ const status = input.status ?? "active";
85
+ if (status !== "active" && status !== "paused") {
86
+ throw new Error('Schedule create status must be "active" or "paused"');
87
+ }
88
+ const normalized = {
89
+ timing: normalizeScheduleTiming(input.timing, options),
90
+ invocation: normalizeScheduleInvocation(input.invocation),
91
+ status,
92
+ policy: normalizeCompletePolicy(input.policy),
93
+ metadata: normalizeMetadata(input.metadata, "Schedule metadata"),
94
+ };
95
+ if (input.id !== undefined) {
96
+ normalized.id = requiredString(input.id, "Schedule id", SCHEDULE_LIMITS.idLength);
97
+ }
98
+ if (input.name !== undefined) {
99
+ normalized.name = requiredString(input.name, "Schedule name", SCHEDULE_LIMITS.nameLength);
100
+ }
101
+ if (input.description !== undefined) {
102
+ normalized.description = requiredString(input.description, "Schedule description", SCHEDULE_LIMITS.descriptionLength);
103
+ }
104
+ return normalized;
105
+ }
106
+ export function normalizeUpdateScheduleInput(value, options = {}) {
107
+ const input = record(value, "Schedule update input");
108
+ assertKnownKeys(input, ["name", "description", "timing", "invocation", "status", "policy", "metadata"], "Schedule update input");
109
+ if (Object.keys(input).length === 0) {
110
+ throw new Error("Schedule update must include at least one field");
111
+ }
112
+ const normalized = {};
113
+ if (input.name !== undefined) {
114
+ normalized.name = input.name === null
115
+ ? null
116
+ : requiredString(input.name, "Schedule name", SCHEDULE_LIMITS.nameLength);
117
+ }
118
+ if (input.description !== undefined) {
119
+ normalized.description = input.description === null
120
+ ? null
121
+ : requiredString(input.description, "Schedule description", SCHEDULE_LIMITS.descriptionLength);
122
+ }
123
+ if (input.timing !== undefined) {
124
+ normalized.timing = normalizeScheduleTiming(input.timing, options);
125
+ }
126
+ if (input.invocation !== undefined) {
127
+ normalized.invocation = normalizeScheduleInvocation(input.invocation);
128
+ }
129
+ if (input.status !== undefined) {
130
+ if (input.status !== "active"
131
+ && input.status !== "paused"
132
+ && input.status !== "completed") {
133
+ throw new Error('Schedule update status must be "active", "paused", or "completed"');
134
+ }
135
+ normalized.status = input.status;
136
+ }
137
+ if (input.policy !== undefined) {
138
+ normalized.policy = normalizePartialPolicy(input.policy);
139
+ }
140
+ if (input.metadata !== undefined) {
141
+ normalized.metadata = normalizeMetadata(input.metadata, "Schedule metadata");
142
+ }
143
+ return normalized;
144
+ }
145
+ export function translateLegacyMissionSchedule(value, options = {}) {
146
+ const input = record(value, "Legacy mission schedule");
147
+ assertKnownKeys(input, ["missionId", "expression", "recurring", "endDate"], "Legacy mission schedule");
148
+ const missionId = requiredString(input.missionId, "Legacy mission schedule missionId", SCHEDULE_LIMITS.idLength);
149
+ const expression = requiredString(input.expression, "Legacy mission schedule expression", 512);
150
+ const recurring = input.recurring ?? false;
151
+ if (typeof recurring !== "boolean") {
152
+ throw new Error("Legacy mission schedule recurring must be a boolean");
153
+ }
154
+ const timezone = normalizeTimezone(options.timezone ?? "UTC");
155
+ let timing;
156
+ try {
157
+ timing = {
158
+ kind: "cron",
159
+ expression: normalizeCronExpression(expression),
160
+ timezone,
161
+ };
162
+ }
163
+ catch (cronError) {
164
+ if (!ISO_TIMESTAMP_WITH_OFFSET.test(expression)) {
165
+ throw new Error(`Legacy mission schedule expression must be a valid cron or absolute ISO timestamp: ${errorMessage(cronError)}`);
166
+ }
167
+ if (recurring) {
168
+ throw new Error("A recurring legacy mission schedule requires a cron expression");
169
+ }
170
+ timing = normalizeScheduleTiming({ kind: "once", at: expression, timezone }, options);
171
+ }
172
+ const compatibility = {
173
+ source: "mission-v1",
174
+ recurring,
175
+ deprecated: true,
176
+ };
177
+ if (timing.kind === "cron" && !recurring) {
178
+ compatibility.maxOccurrences = 1;
179
+ }
180
+ if (input.endDate !== undefined) {
181
+ const endDate = normalizeTimestamp(input.endDate, "Legacy mission schedule endDate");
182
+ if (Date.parse(endDate) <= normalizeNow(options.now).getTime()) {
183
+ throw new Error("Legacy mission schedule endDate must be in the future");
184
+ }
185
+ compatibility.endDate = endDate;
186
+ }
187
+ return normalizeCreateScheduleInput({
188
+ name: `Mission ${missionId} schedule`,
189
+ timing,
190
+ invocation: {
191
+ surface: "legacy_mission",
192
+ missionId,
193
+ },
194
+ status: "active",
195
+ policy: DEFAULT_POLICY,
196
+ metadata: { compatibility },
197
+ }, options);
198
+ }
199
+ function normalizeAgentInvocation(invocation) {
200
+ assertKnownKeys(invocation, ["surface", "agentName", "input", "session", "execution"], "Schedule agent invocation");
201
+ const input = record(invocation.input, "Schedule agent input");
202
+ assertKnownKeys(input, ["prompt", "messages"], "Schedule agent input");
203
+ const hasPrompt = input.prompt !== undefined;
204
+ const hasMessages = input.messages !== undefined;
205
+ if (hasPrompt === hasMessages) {
206
+ throw new Error("Schedule agent input requires prompt or messages, but not both");
207
+ }
208
+ const normalizedInput = {};
209
+ if (hasPrompt) {
210
+ normalizedInput.prompt = requiredString(input.prompt, "Schedule agent prompt", SCHEDULE_LIMITS.promptLength);
211
+ }
212
+ else {
213
+ normalizedInput.messages = normalizeMessages(input.messages);
214
+ }
215
+ const normalized = {
216
+ surface: "agent",
217
+ agentName: requiredString(invocation.agentName, "Schedule agent invocation agentName", SCHEDULE_LIMITS.idLength),
218
+ input: normalizedInput,
219
+ };
220
+ if (invocation.session !== undefined) {
221
+ normalized.session = normalizeSession(invocation.session);
222
+ }
223
+ if (invocation.execution !== undefined) {
224
+ normalized.execution = normalizeExecution(invocation.execution);
225
+ }
226
+ return normalized;
227
+ }
228
+ function normalizeTaskInvocation(invocation) {
229
+ assertKnownKeys(invocation, ["surface", "agentName", "title", "prompt", "userId", "metadata", "execution"], "Schedule task invocation");
230
+ const normalized = {
231
+ surface: "task",
232
+ agentName: requiredString(invocation.agentName, "Schedule task invocation agentName", SCHEDULE_LIMITS.idLength),
233
+ title: requiredString(invocation.title, "Schedule task title", SCHEDULE_LIMITS.nameLength),
234
+ prompt: requiredString(invocation.prompt, "Schedule task prompt", SCHEDULE_LIMITS.promptLength),
235
+ };
236
+ if (invocation.userId !== undefined) {
237
+ normalized.userId = requiredString(invocation.userId, "Schedule task userId", SCHEDULE_LIMITS.idLength);
238
+ }
239
+ if (invocation.metadata !== undefined) {
240
+ normalized.metadata = normalizeMetadata(invocation.metadata, "Schedule task metadata");
241
+ }
242
+ if (invocation.execution !== undefined) {
243
+ normalized.execution = normalizeExecution(invocation.execution);
244
+ }
245
+ return normalized;
246
+ }
247
+ function normalizeChannelInvocation(invocation) {
248
+ const sharedKeys = [
249
+ "surface",
250
+ "channelId",
251
+ "routeId",
252
+ "externalThreadId",
253
+ "mode",
254
+ "metadata",
255
+ ];
256
+ const channelId = requiredString(invocation.channelId, "Schedule channel invocation channelId", SCHEDULE_LIMITS.idLength);
257
+ const shared = {
258
+ channelId,
259
+ ...(invocation.routeId === undefined
260
+ ? {}
261
+ : {
262
+ routeId: requiredString(invocation.routeId, "Schedule channel invocation routeId", SCHEDULE_LIMITS.idLength),
263
+ }),
264
+ ...(invocation.externalThreadId === undefined
265
+ ? {}
266
+ : {
267
+ externalThreadId: requiredString(invocation.externalThreadId, "Schedule channel invocation externalThreadId", SCHEDULE_LIMITS.idLength),
268
+ }),
269
+ ...(invocation.metadata === undefined
270
+ ? {}
271
+ : {
272
+ metadata: normalizeMetadata(invocation.metadata, "Schedule channel metadata"),
273
+ }),
274
+ };
275
+ if (invocation.mode === "send") {
276
+ assertKnownKeys(invocation, [...sharedKeys, "text"], "Schedule channel send invocation");
277
+ return {
278
+ surface: "channel",
279
+ ...shared,
280
+ mode: "send",
281
+ text: requiredString(invocation.text, "Schedule channel send text", SCHEDULE_LIMITS.promptLength),
282
+ };
283
+ }
284
+ if (invocation.mode === "agent_reply") {
285
+ assertKnownKeys(invocation, [...sharedKeys, "agentName", "prompt", "execution"], "Schedule channel agent_reply invocation");
286
+ return {
287
+ surface: "channel",
288
+ ...shared,
289
+ mode: "agent_reply",
290
+ agentName: requiredString(invocation.agentName, "Schedule channel agent_reply agentName", SCHEDULE_LIMITS.idLength),
291
+ prompt: requiredString(invocation.prompt, "Schedule channel agent_reply prompt", SCHEDULE_LIMITS.promptLength),
292
+ ...(invocation.execution === undefined
293
+ ? {}
294
+ : { execution: normalizeExecution(invocation.execution) }),
295
+ };
296
+ }
297
+ throw new Error('Schedule channel invocation mode must be "send" or "agent_reply"');
298
+ }
299
+ function normalizeWebhookInvocation(invocation) {
300
+ assertKnownKeys(invocation, ["surface", "webhookId", "payload"], "Schedule webhook invocation");
301
+ return {
302
+ surface: "webhook",
303
+ webhookId: requiredString(invocation.webhookId, "Schedule webhook invocation webhookId", SCHEDULE_LIMITS.idLength),
304
+ ...(invocation.payload === undefined
305
+ ? {}
306
+ : {
307
+ payload: normalizeMetadata(invocation.payload, "Schedule webhook payload"),
308
+ }),
309
+ };
310
+ }
311
+ function normalizeLegacyMissionInvocation(invocation) {
312
+ assertKnownKeys(invocation, ["surface", "missionId"], "Schedule legacy mission invocation");
313
+ return {
314
+ surface: "legacy_mission",
315
+ missionId: requiredString(invocation.missionId, "Schedule legacy mission invocation missionId", SCHEDULE_LIMITS.idLength),
316
+ };
317
+ }
318
+ function normalizeMessages(value) {
319
+ if (!Array.isArray(value) || value.length === 0) {
320
+ throw new Error("Schedule agent messages must be a non-empty array");
321
+ }
322
+ if (value.length > SCHEDULE_LIMITS.messageCount) {
323
+ throw new Error(`Schedule agent messages supports at most ${SCHEDULE_LIMITS.messageCount} entries`);
324
+ }
325
+ return value.map((item, index) => {
326
+ const message = record(item, `Schedule agent message ${index}`);
327
+ assertKnownKeys(message, ["role", "content"], `Schedule agent message ${index}`);
328
+ if (message.role !== "system"
329
+ && message.role !== "user"
330
+ && message.role !== "assistant") {
331
+ throw new Error(`Schedule agent message ${index} role must be system, user, or assistant`);
332
+ }
333
+ return {
334
+ role: message.role,
335
+ content: requiredString(message.content, `Schedule agent message ${index} content`, SCHEDULE_LIMITS.promptLength),
336
+ };
337
+ });
338
+ }
339
+ function normalizeSession(value) {
340
+ const session = record(value, "Schedule agent session");
341
+ assertKnownKeys(session, ["mode", "sessionId", "userId"], "Schedule agent session");
342
+ if (session.mode !== "new" && session.mode !== "reuse") {
343
+ throw new Error('Schedule agent session mode must be "new" or "reuse"');
344
+ }
345
+ if (session.mode === "new" && session.sessionId !== undefined) {
346
+ throw new Error("A new session cannot include sessionId");
347
+ }
348
+ if (session.mode === "reuse" && session.sessionId === undefined) {
349
+ throw new Error("A reused session requires sessionId");
350
+ }
351
+ return {
352
+ mode: session.mode,
353
+ ...(session.sessionId === undefined
354
+ ? {}
355
+ : {
356
+ sessionId: requiredString(session.sessionId, "Schedule agent sessionId", SCHEDULE_LIMITS.idLength),
357
+ }),
358
+ ...(session.userId === undefined
359
+ ? {}
360
+ : {
361
+ userId: requiredString(session.userId, "Schedule agent session userId", SCHEDULE_LIMITS.idLength),
362
+ }),
363
+ };
364
+ }
365
+ function normalizeExecution(value) {
366
+ const execution = record(value, "Schedule execution options");
367
+ assertKnownKeys(execution, ["loop", "model", "sandbox", "guardrails", "metadata"], "Schedule execution options");
368
+ const normalized = {};
369
+ if (execution.loop !== undefined) {
370
+ normalized.loop = requiredString(execution.loop, "Schedule execution loop", SCHEDULE_LIMITS.idLength);
371
+ }
372
+ if (execution.model !== undefined) {
373
+ normalized.model = requiredString(execution.model, "Schedule execution model", SCHEDULE_LIMITS.idLength);
374
+ }
375
+ if (execution.sandbox !== undefined) {
376
+ const sandbox = record(execution.sandbox, "Schedule execution sandbox");
377
+ assertKnownKeys(sandbox, ["isolation"], "Schedule execution sandbox");
378
+ if (sandbox.isolation !== undefined
379
+ && sandbox.isolation !== "reuse"
380
+ && sandbox.isolation !== "fresh") {
381
+ throw new Error('Schedule sandbox isolation must be "reuse" or "fresh"');
382
+ }
383
+ normalized.sandbox = {
384
+ ...(sandbox.isolation === undefined ? {} : { isolation: sandbox.isolation }),
385
+ };
386
+ }
387
+ if (execution.guardrails !== undefined) {
388
+ const guardrails = record(execution.guardrails, "Schedule execution guardrails");
389
+ assertKnownKeys(guardrails, ["mode"], "Schedule execution guardrails");
390
+ normalized.guardrails = {
391
+ ...(guardrails.mode === undefined
392
+ ? {}
393
+ : {
394
+ mode: requiredString(guardrails.mode, "Schedule guardrails mode", SCHEDULE_LIMITS.idLength),
395
+ }),
396
+ };
397
+ }
398
+ if (execution.metadata !== undefined) {
399
+ normalized.metadata = normalizeMetadata(execution.metadata, "Schedule execution metadata");
400
+ }
401
+ return normalized;
402
+ }
403
+ function normalizeCompletePolicy(value) {
404
+ if (value === undefined)
405
+ return { ...DEFAULT_POLICY };
406
+ const partial = normalizePartialPolicy(value);
407
+ return {
408
+ catchUp: partial.catchUp ?? DEFAULT_POLICY.catchUp,
409
+ misfireGraceSeconds: partial.misfireGraceSeconds ?? DEFAULT_POLICY.misfireGraceSeconds,
410
+ maxConcurrency: partial.maxConcurrency ?? DEFAULT_POLICY.maxConcurrency,
411
+ };
412
+ }
413
+ function normalizePartialPolicy(value) {
414
+ const policy = record(value, "Schedule policy");
415
+ assertKnownKeys(policy, ["catchUp", "misfireGraceSeconds", "maxConcurrency"], "Schedule policy");
416
+ if (Object.keys(policy).length === 0) {
417
+ throw new Error("Schedule policy must include at least one field");
418
+ }
419
+ const normalized = {};
420
+ if (policy.catchUp !== undefined) {
421
+ if (policy.catchUp !== "skip" && policy.catchUp !== "latest") {
422
+ throw new Error('Schedule policy catchUp must be "skip" or "latest"');
423
+ }
424
+ normalized.catchUp = policy.catchUp;
425
+ }
426
+ if (policy.misfireGraceSeconds !== undefined) {
427
+ normalized.misfireGraceSeconds = boundedInteger(policy.misfireGraceSeconds, "Schedule policy misfireGraceSeconds", 0, SCHEDULE_LIMITS.maxMisfireGraceSeconds);
428
+ }
429
+ if (policy.maxConcurrency !== undefined) {
430
+ normalized.maxConcurrency = boundedInteger(policy.maxConcurrency, "Schedule policy maxConcurrency", 1, SCHEDULE_LIMITS.maxConcurrency);
431
+ }
432
+ return normalized;
433
+ }
434
+ function normalizeMetadata(value, label) {
435
+ if (value === undefined)
436
+ return {};
437
+ const root = record(value, label);
438
+ const state = {
439
+ nodes: 0,
440
+ seen: new Set(),
441
+ };
442
+ const cloned = cloneJson(root, label, 0, state);
443
+ const serialized = JSON.stringify(cloned);
444
+ if (new TextEncoder().encode(serialized).byteLength > SCHEDULE_LIMITS.metadataBytes) {
445
+ throw new Error(`${label} exceeds the ${SCHEDULE_LIMITS.metadataBytes}-byte metadata limit`);
446
+ }
447
+ return cloned;
448
+ }
449
+ export function normalizeScheduleMetadata(value, label = "Schedule metadata") {
450
+ return normalizeMetadata(value, label);
451
+ }
452
+ function cloneJson(value, label, depth, state) {
453
+ state.nodes += 1;
454
+ if (state.nodes > SCHEDULE_LIMITS.metadataNodes) {
455
+ throw new Error(`${label} exceeds the metadata node limit`);
456
+ }
457
+ if (depth > SCHEDULE_LIMITS.metadataDepth) {
458
+ throw new Error(`${label} exceeds the metadata depth limit`);
459
+ }
460
+ if (value === null
461
+ || typeof value === "string"
462
+ || typeof value === "boolean") {
463
+ return value;
464
+ }
465
+ if (typeof value === "number") {
466
+ if (!Number.isFinite(value)) {
467
+ throw new Error(`${label} metadata numbers must be finite`);
468
+ }
469
+ return value;
470
+ }
471
+ if (typeof value !== "object") {
472
+ throw new Error(`${label} must contain only JSON-serializable metadata`);
473
+ }
474
+ if (state.seen.has(value)) {
475
+ throw new Error(`${label} cannot contain cyclic metadata`);
476
+ }
477
+ state.seen.add(value);
478
+ try {
479
+ if (Array.isArray(value)) {
480
+ const result = [];
481
+ for (let index = 0; index < value.length; index += 1) {
482
+ if (!Object.prototype.hasOwnProperty.call(value, index)) {
483
+ throw new Error(`${label} cannot contain sparse metadata arrays`);
484
+ }
485
+ result.push(cloneJson(value[index], label, depth + 1, state));
486
+ }
487
+ return result;
488
+ }
489
+ if (!isPlainRecord(value)) {
490
+ throw new Error(`${label} must contain only plain metadata objects`);
491
+ }
492
+ const result = {};
493
+ for (const [key, child] of Object.entries(value)) {
494
+ if (FORBIDDEN_JSON_KEYS.has(key)) {
495
+ throw new Error(`${label} key ${key} is not allowed in metadata`);
496
+ }
497
+ result[key] = cloneJson(child, label, depth + 1, state);
498
+ }
499
+ return result;
500
+ }
501
+ finally {
502
+ state.seen.delete(value);
503
+ }
504
+ }
505
+ function validateCronField(field, min, max) {
506
+ if (!field || field.startsWith(",") || field.endsWith(",") || field.includes(",,")) {
507
+ throw new Error(`Invalid schedule cron field "${field}"`);
508
+ }
509
+ for (const item of field.split(",")) {
510
+ const slashParts = item.split("/");
511
+ if (slashParts.length > 2 || !slashParts[0]) {
512
+ throw new Error(`Invalid schedule cron field "${field}"`);
513
+ }
514
+ if (slashParts.length === 2) {
515
+ if (!/^\d+$/.test(slashParts[1])) {
516
+ throw new Error(`Invalid schedule cron step in "${field}"`);
517
+ }
518
+ const step = Number(slashParts[1]);
519
+ if (!Number.isSafeInteger(step) || step <= 0) {
520
+ throw new Error(`Invalid schedule cron step in "${field}"`);
521
+ }
522
+ }
523
+ const base = slashParts[0];
524
+ if (base === "*")
525
+ continue;
526
+ const rangeParts = base.split("-");
527
+ if (rangeParts.length > 2 || rangeParts.some((part) => !/^\d+$/.test(part))) {
528
+ throw new Error(`Invalid schedule cron value in "${field}"`);
529
+ }
530
+ const start = Number(rangeParts[0]);
531
+ const end = rangeParts.length === 2 ? Number(rangeParts[1]) : start;
532
+ if (!Number.isSafeInteger(start)
533
+ || !Number.isSafeInteger(end)
534
+ || start < min
535
+ || start > max
536
+ || end < min
537
+ || end > max
538
+ || start > end) {
539
+ throw new Error(`Invalid schedule cron range in "${field}"`);
540
+ }
541
+ }
542
+ }
543
+ function normalizeTimezone(value) {
544
+ const timezone = requiredString(value, "Schedule timezone", 100);
545
+ try {
546
+ new Intl.DateTimeFormat("en-US", { timeZone: timezone }).format(new Date("2026-01-01T00:00:00.000Z"));
547
+ }
548
+ catch {
549
+ throw new Error(`Invalid schedule timezone "${timezone}"`);
550
+ }
551
+ return timezone;
552
+ }
553
+ function normalizeTimestamp(value, label) {
554
+ const timestamp = requiredString(value, label, 100);
555
+ if (!ISO_TIMESTAMP_WITH_OFFSET.test(timestamp)) {
556
+ throw new Error(`${label} must include an explicit UTC or numeric offset`);
557
+ }
558
+ const parsed = new Date(timestamp);
559
+ if (!Number.isFinite(parsed.getTime())) {
560
+ throw new Error(`${label} must be a valid absolute ISO timestamp`);
561
+ }
562
+ return parsed.toISOString();
563
+ }
564
+ function normalizeNow(value) {
565
+ const now = value === undefined ? new Date() : new Date(value);
566
+ if (!Number.isFinite(now.getTime())) {
567
+ throw new Error("Schedule validation now must be a valid date");
568
+ }
569
+ return now;
570
+ }
571
+ function boundedInteger(value, label, min, max) {
572
+ if (!Number.isInteger(value) || value < min || value > max) {
573
+ throw new Error(`${label} must be an integer between ${min} and ${max}`);
574
+ }
575
+ return value;
576
+ }
577
+ function requiredString(value, label, maxLength) {
578
+ if (typeof value !== "string") {
579
+ throw new Error(`${label} must be a string`);
580
+ }
581
+ const normalized = value.trim();
582
+ if (!normalized) {
583
+ throw new Error(`${label} cannot be empty`);
584
+ }
585
+ if (normalized.length > maxLength) {
586
+ throw new Error(`${label} exceeds the ${maxLength}-character limit`);
587
+ }
588
+ return normalized;
589
+ }
590
+ function record(value, label) {
591
+ if (!isPlainRecord(value)) {
592
+ throw new Error(`${label} must be an object`);
593
+ }
594
+ return value;
595
+ }
596
+ function isPlainRecord(value) {
597
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
598
+ return false;
599
+ }
600
+ const prototype = Object.getPrototypeOf(value);
601
+ return prototype === Object.prototype || prototype === null;
602
+ }
603
+ function assertKnownKeys(value, allowed, label) {
604
+ const allowedSet = new Set(allowed);
605
+ for (const key of Object.keys(value)) {
606
+ if (!allowedSet.has(key)) {
607
+ throw new Error(`${label} contains unsupported field "${key}"`);
608
+ }
609
+ }
610
+ }
611
+ function errorMessage(error) {
612
+ return error instanceof Error ? error.message : String(error);
613
+ }
614
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/scheduling/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../../src/scheduling/validation.test.ts"],"names":[],"mappings":""}