mcp-event-intelligence 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/LICENSE +201 -0
  3. package/README.md +298 -0
  4. package/SECURITY.md +42 -0
  5. package/bin/mcp-event-intelligence.mjs +52 -0
  6. package/dist/src/composite/engine.d.ts +87 -0
  7. package/dist/src/composite/engine.js +667 -0
  8. package/dist/src/composite/temporal.d.ts +32 -0
  9. package/dist/src/composite/temporal.js +317 -0
  10. package/dist/src/intelligenceProtocol/audit.d.ts +19 -0
  11. package/dist/src/intelligenceProtocol/audit.js +56 -0
  12. package/dist/src/intelligenceProtocol/canonical.d.ts +2 -0
  13. package/dist/src/intelligenceProtocol/canonical.js +21 -0
  14. package/dist/src/intelligenceProtocol/index.d.ts +12 -0
  15. package/dist/src/intelligenceProtocol/index.js +8 -0
  16. package/dist/src/intelligenceProtocol/invariants.d.ts +3 -0
  17. package/dist/src/intelligenceProtocol/invariants.js +36 -0
  18. package/dist/src/intelligenceProtocol/lifecycle.d.ts +4 -0
  19. package/dist/src/intelligenceProtocol/lifecycle.js +24 -0
  20. package/dist/src/intelligenceProtocol/mapper.d.ts +14 -0
  21. package/dist/src/intelligenceProtocol/mapper.js +28 -0
  22. package/dist/src/intelligenceProtocol/schemas.d.ts +325 -0
  23. package/dist/src/intelligenceProtocol/schemas.js +182 -0
  24. package/dist/src/intelligenceProtocol/triggerSchemas.d.ts +488 -0
  25. package/dist/src/intelligenceProtocol/triggerSchemas.js +379 -0
  26. package/dist/src/intelligenceProtocol/version.d.ts +7 -0
  27. package/dist/src/intelligenceProtocol/version.js +7 -0
  28. package/dist/src/mcpEvents/consumer.d.ts +7 -0
  29. package/dist/src/mcpEvents/consumer.js +14 -0
  30. package/dist/src/mcpEvents/server.d.ts +41 -0
  31. package/dist/src/mcpEvents/server.js +122 -0
  32. package/dist/src/protocol/types.d.ts +37 -0
  33. package/dist/src/protocol/types.js +1 -0
  34. package/dist/src/semantic/conditionEngine.d.ts +7 -0
  35. package/dist/src/semantic/conditionEngine.js +65 -0
  36. package/dist/src/semantic/types.d.ts +31 -0
  37. package/dist/src/semantic/types.js +1 -0
  38. package/dist/src/semantic/typesafeJevEvaluator.d.ts +23 -0
  39. package/dist/src/semantic/typesafeJevEvaluator.js +95 -0
  40. package/package.json +85 -0
  41. package/scripts/host-integration.d.mts +86 -0
  42. package/scripts/host-integration.mjs +216 -0
  43. package/scripts/lib/composite-event-consumer.mjs +172 -0
  44. package/scripts/lib/composite-wake-coordinator.mjs +185 -0
  45. package/scripts/lib/derived-contract-registry.mjs +210 -0
  46. package/scripts/lib/derived-event-coordinator.mjs +242 -0
  47. package/scripts/lib/event-processor.mjs +409 -0
  48. package/scripts/lib/generic-runtime-wake.mjs +76 -0
  49. package/scripts/lib/github-mcp-events-adapter.mjs +66 -0
  50. package/scripts/lib/github-webhook.mjs +88 -0
  51. package/scripts/lib/http-wake-deliverer.mjs +31 -0
  52. package/scripts/lib/local-event-intelligence-runtime.mjs +193 -0
  53. package/scripts/lib/mcp-events-client.mjs +519 -0
  54. package/scripts/lib/persistent-event-store.mjs +769 -0
  55. package/scripts/lib/temporal-deadline-scheduler.mjs +111 -0
  56. package/scripts/lib/trigger-control-plane.mjs +939 -0
  57. package/scripts/lib/trigger-inspector.mjs +631 -0
  58. package/scripts/lib/wake-signature.mjs +10 -0
  59. package/scripts/mcp-stdio-server.mjs +380 -0
  60. package/scripts/mcp-stdio.mjs +3 -0
  61. package/scripts/run-tests.mjs +51 -0
  62. package/scripts/service.mjs +756 -0
  63. package/server.json +68 -0
@@ -0,0 +1,325 @@
1
+ import { z } from 'zod';
2
+ export declare const RuntimeTargetSchema: z.ZodObject<{
3
+ runtime: z.ZodString;
4
+ kind: z.ZodEnum<{
5
+ goal: "goal";
6
+ session: "session";
7
+ conversation: "conversation";
8
+ task: "task";
9
+ spawn_template: "spawn_template";
10
+ }>;
11
+ id: z.ZodString;
12
+ }, z.core.$strip>;
13
+ export declare const EventSourceSchema: z.ZodObject<{
14
+ serverId: z.ZodString;
15
+ transport: z.ZodEnum<{
16
+ stdio: "stdio";
17
+ streamable_http: "streamable_http";
18
+ webhook: "webhook";
19
+ poll: "poll";
20
+ internal: "internal";
21
+ }>;
22
+ provider: z.ZodOptional<z.ZodString>;
23
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ }, z.core.$strip>;
25
+ export declare const EventLineageSchema: z.ZodObject<{
26
+ protocol: z.ZodLiteral<"mcp-event-intelligence">;
27
+ protocolVersion: z.ZodLiteral<"0.1.0">;
28
+ schemaVersion: z.ZodLiteral<"ei.v0.1">;
29
+ traceId: z.ZodString;
30
+ environmentId: z.ZodString;
31
+ subscriptionId: z.ZodString;
32
+ sourceEventId: z.ZodString;
33
+ observedAt: z.ZodString;
34
+ source: z.ZodObject<{
35
+ serverId: z.ZodString;
36
+ transport: z.ZodEnum<{
37
+ stdio: "stdio";
38
+ streamable_http: "streamable_http";
39
+ webhook: "webhook";
40
+ poll: "poll";
41
+ internal: "internal";
42
+ }>;
43
+ provider: z.ZodOptional<z.ZodString>;
44
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
45
+ }, z.core.$strip>;
46
+ target: z.ZodObject<{
47
+ runtime: z.ZodString;
48
+ kind: z.ZodEnum<{
49
+ goal: "goal";
50
+ session: "session";
51
+ conversation: "conversation";
52
+ task: "task";
53
+ spawn_template: "spawn_template";
54
+ }>;
55
+ id: z.ZodString;
56
+ }, z.core.$strip>;
57
+ event: z.ZodObject<{
58
+ name: z.ZodString;
59
+ occurredAt: z.ZodString;
60
+ payloadHash: z.ZodString;
61
+ }, z.core.$strip>;
62
+ }, z.core.$strip>;
63
+ export declare const SemanticDecisionRecordSchema: z.ZodObject<{
64
+ decisionId: z.ZodString;
65
+ traceId: z.ZodString;
66
+ subscriptionId: z.ZodString;
67
+ sourceEventId: z.ZodString;
68
+ createdAt: z.ZodString;
69
+ evaluator: z.ZodString;
70
+ outcome: z.ZodEnum<{
71
+ reject: "reject";
72
+ match: "match";
73
+ uncertain: "uncertain";
74
+ }>;
75
+ probability: z.ZodNumber;
76
+ matched: z.ZodBoolean;
77
+ shouldEscalate: z.ZodBoolean;
78
+ policy: z.ZodObject<{
79
+ matchThreshold: z.ZodNumber;
80
+ rejectThreshold: z.ZodNumber;
81
+ uncertain: z.ZodEnum<{
82
+ escalate: "escalate";
83
+ reject: "reject";
84
+ match: "match";
85
+ }>;
86
+ }, z.core.$strip>;
87
+ inputFields: z.ZodArray<z.ZodString>;
88
+ providerEvidence: z.ZodOptional<z.ZodObject<{
89
+ requestedModel: z.ZodOptional<z.ZodString>;
90
+ resolvedModel: z.ZodOptional<z.ZodString>;
91
+ requestId: z.ZodOptional<z.ZodString>;
92
+ httpStatus: z.ZodOptional<z.ZodNumber>;
93
+ inputTokens: z.ZodOptional<z.ZodNumber>;
94
+ outputTokens: z.ZodOptional<z.ZodNumber>;
95
+ providerReportedCost: z.ZodOptional<z.ZodNumber>;
96
+ }, z.core.$strip>>;
97
+ }, z.core.$strip>;
98
+ export declare const WakeRecordSchema: z.ZodObject<{
99
+ wakeId: z.ZodString;
100
+ traceId: z.ZodString;
101
+ decisionId: z.ZodNullable<z.ZodString>;
102
+ subscriptionId: z.ZodString;
103
+ sourceEventId: z.ZodString;
104
+ createdAt: z.ZodString;
105
+ target: z.ZodObject<{
106
+ runtime: z.ZodString;
107
+ kind: z.ZodEnum<{
108
+ goal: "goal";
109
+ session: "session";
110
+ conversation: "conversation";
111
+ task: "task";
112
+ spawn_template: "spawn_template";
113
+ }>;
114
+ id: z.ZodString;
115
+ }, z.core.$strip>;
116
+ status: z.ZodEnum<{
117
+ queued: "queued";
118
+ delivered: "delivered";
119
+ handled: "handled";
120
+ duplicate: "duplicate";
121
+ dead_letter: "dead_letter";
122
+ }>;
123
+ runtimeReceiptId: z.ZodOptional<z.ZodString>;
124
+ }, z.core.$strip>;
125
+ export declare const McpEventOccurrenceSchema: z.ZodObject<{
126
+ eventId: z.ZodString;
127
+ name: z.ZodString;
128
+ timestamp: z.ZodString;
129
+ data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
130
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
131
+ }, z.core.$strip>;
132
+ export declare const SemanticConditionWireSchema: z.ZodObject<{
133
+ type: z.ZodLiteral<"semantic_boolean">;
134
+ instruction: z.ZodString;
135
+ input: z.ZodArray<z.ZodString>;
136
+ matchThreshold: z.ZodNumber;
137
+ rejectThreshold: z.ZodNumber;
138
+ uncertain: z.ZodEnum<{
139
+ escalate: "escalate";
140
+ reject: "reject";
141
+ match: "match";
142
+ }>;
143
+ }, z.core.$strip>;
144
+ export declare const EventIngestRequestSchema: z.ZodObject<{
145
+ event: z.ZodObject<{
146
+ eventId: z.ZodString;
147
+ name: z.ZodString;
148
+ timestamp: z.ZodString;
149
+ data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
150
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
151
+ }, z.core.$strip>;
152
+ context: z.ZodObject<{
153
+ traceId: z.ZodOptional<z.ZodString>;
154
+ environmentId: z.ZodString;
155
+ subscriptionId: z.ZodString;
156
+ serverId: z.ZodString;
157
+ transport: z.ZodEnum<{
158
+ stdio: "stdio";
159
+ streamable_http: "streamable_http";
160
+ webhook: "webhook";
161
+ poll: "poll";
162
+ internal: "internal";
163
+ }>;
164
+ provider: z.ZodOptional<z.ZodString>;
165
+ target: z.ZodObject<{
166
+ runtime: z.ZodString;
167
+ kind: z.ZodEnum<{
168
+ goal: "goal";
169
+ session: "session";
170
+ conversation: "conversation";
171
+ task: "task";
172
+ spawn_template: "spawn_template";
173
+ }>;
174
+ id: z.ZodString;
175
+ }, z.core.$strip>;
176
+ }, z.core.$strip>;
177
+ semanticCondition: z.ZodOptional<z.ZodObject<{
178
+ type: z.ZodLiteral<"semantic_boolean">;
179
+ instruction: z.ZodString;
180
+ input: z.ZodArray<z.ZodString>;
181
+ matchThreshold: z.ZodNumber;
182
+ rejectThreshold: z.ZodNumber;
183
+ uncertain: z.ZodEnum<{
184
+ escalate: "escalate";
185
+ reject: "reject";
186
+ match: "match";
187
+ }>;
188
+ }, z.core.$strip>>;
189
+ wakeOnEscalation: z.ZodDefault<z.ZodBoolean>;
190
+ }, z.core.$strip>;
191
+ export declare const LifecycleStateSchema: z.ZodEnum<{
192
+ matched: "matched";
193
+ handled: "handled";
194
+ duplicate: "duplicate";
195
+ dead_letter: "dead_letter";
196
+ received: "received";
197
+ evaluating: "evaluating";
198
+ rejected: "rejected";
199
+ escalated: "escalated";
200
+ wake_queued: "wake_queued";
201
+ wake_delivered: "wake_delivered";
202
+ failed: "failed";
203
+ }>;
204
+ export declare const AuditKindSchema: z.ZodEnum<{
205
+ error: "error";
206
+ "event.received": "event.received";
207
+ "event.duplicate": "event.duplicate";
208
+ "decision.evaluated": "decision.evaluated";
209
+ "lifecycle.transition": "lifecycle.transition";
210
+ "wake.queued": "wake.queued";
211
+ "wake.delivered": "wake.delivered";
212
+ "wake.handled": "wake.handled";
213
+ "wake.dead_letter": "wake.dead_letter";
214
+ "trigger.partial": "trigger.partial";
215
+ "trigger.correlation": "trigger.correlation";
216
+ "trigger.matched": "trigger.matched";
217
+ "trigger.fired": "trigger.fired";
218
+ "trigger.emitted": "trigger.emitted";
219
+ "trigger.expired": "trigger.expired";
220
+ "trigger.created": "trigger.created";
221
+ "trigger.paused": "trigger.paused";
222
+ "trigger.resumed": "trigger.resumed";
223
+ "trigger.updated": "trigger.updated";
224
+ "trigger.deleted": "trigger.deleted";
225
+ "trigger.completed": "trigger.completed";
226
+ "trigger.lifecycle_expired": "trigger.lifecycle_expired";
227
+ "event_source.registered": "event_source.registered";
228
+ "derived_event.created": "derived_event.created";
229
+ "derived_event.replayed": "derived_event.replayed";
230
+ "derived_contract.created": "derived_contract.created";
231
+ "derived_contract.producer_registered": "derived_contract.producer_registered";
232
+ "derived_contract.conflict": "derived_contract.conflict";
233
+ }>;
234
+ export declare const AuditRecordSchema: z.ZodObject<{
235
+ auditId: z.ZodString;
236
+ sequence: z.ZodNumber;
237
+ traceId: z.ZodString;
238
+ timestamp: z.ZodString;
239
+ kind: z.ZodEnum<{
240
+ error: "error";
241
+ "event.received": "event.received";
242
+ "event.duplicate": "event.duplicate";
243
+ "decision.evaluated": "decision.evaluated";
244
+ "lifecycle.transition": "lifecycle.transition";
245
+ "wake.queued": "wake.queued";
246
+ "wake.delivered": "wake.delivered";
247
+ "wake.handled": "wake.handled";
248
+ "wake.dead_letter": "wake.dead_letter";
249
+ "trigger.partial": "trigger.partial";
250
+ "trigger.correlation": "trigger.correlation";
251
+ "trigger.matched": "trigger.matched";
252
+ "trigger.fired": "trigger.fired";
253
+ "trigger.emitted": "trigger.emitted";
254
+ "trigger.expired": "trigger.expired";
255
+ "trigger.created": "trigger.created";
256
+ "trigger.paused": "trigger.paused";
257
+ "trigger.resumed": "trigger.resumed";
258
+ "trigger.updated": "trigger.updated";
259
+ "trigger.deleted": "trigger.deleted";
260
+ "trigger.completed": "trigger.completed";
261
+ "trigger.lifecycle_expired": "trigger.lifecycle_expired";
262
+ "event_source.registered": "event_source.registered";
263
+ "derived_event.created": "derived_event.created";
264
+ "derived_event.replayed": "derived_event.replayed";
265
+ "derived_contract.created": "derived_contract.created";
266
+ "derived_contract.producer_registered": "derived_contract.producer_registered";
267
+ "derived_contract.conflict": "derived_contract.conflict";
268
+ }>;
269
+ entityType: z.ZodEnum<{
270
+ runtime: "runtime";
271
+ event: "event";
272
+ decision: "decision";
273
+ wake: "wake";
274
+ subscription: "subscription";
275
+ trigger_match: "trigger_match";
276
+ trigger: "trigger";
277
+ event_source: "event_source";
278
+ derived_event: "derived_event";
279
+ derived_contract: "derived_contract";
280
+ }>;
281
+ entityId: z.ZodString;
282
+ fromState: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
283
+ matched: "matched";
284
+ handled: "handled";
285
+ duplicate: "duplicate";
286
+ dead_letter: "dead_letter";
287
+ received: "received";
288
+ evaluating: "evaluating";
289
+ rejected: "rejected";
290
+ escalated: "escalated";
291
+ wake_queued: "wake_queued";
292
+ wake_delivered: "wake_delivered";
293
+ failed: "failed";
294
+ }>>>;
295
+ toState: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
296
+ matched: "matched";
297
+ handled: "handled";
298
+ duplicate: "duplicate";
299
+ dead_letter: "dead_letter";
300
+ received: "received";
301
+ evaluating: "evaluating";
302
+ rejected: "rejected";
303
+ escalated: "escalated";
304
+ wake_queued: "wake_queued";
305
+ wake_delivered: "wake_delivered";
306
+ failed: "failed";
307
+ }>>>;
308
+ details: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
309
+ previousHash: z.ZodNullable<z.ZodString>;
310
+ hash: z.ZodString;
311
+ }, z.core.$strip>;
312
+ export type RuntimeTarget = z.infer<typeof RuntimeTargetSchema>;
313
+ export type McpEventOccurrence = z.infer<typeof McpEventOccurrenceSchema>;
314
+ export type SemanticConditionWire = z.infer<typeof SemanticConditionWireSchema>;
315
+ export type EventIngestRequest = z.infer<typeof EventIngestRequestSchema>;
316
+ export type EventLineage = z.infer<typeof EventLineageSchema>;
317
+ export type SemanticDecisionRecord = z.infer<typeof SemanticDecisionRecordSchema>;
318
+ export type WakeRecord = z.infer<typeof WakeRecordSchema>;
319
+ export type LifecycleState = z.infer<typeof LifecycleStateSchema>;
320
+ export type AuditRecord = z.infer<typeof AuditRecordSchema>;
321
+ export declare function parseEventIngestRequest(value: unknown): EventIngestRequest;
322
+ export declare function parseEventLineage(value: unknown): EventLineage;
323
+ export declare function parseSemanticDecisionRecord(value: unknown): SemanticDecisionRecord;
324
+ export declare function parseWakeRecord(value: unknown): WakeRecord;
325
+ export declare function parseAuditRecord(value: unknown): AuditRecord;
@@ -0,0 +1,182 @@
1
+ import { z } from 'zod';
2
+ import { EVENT_INTELLIGENCE_PROTOCOL, EVENT_INTELLIGENCE_PROTOCOL_VERSION, EVENT_INTELLIGENCE_SCHEMA_VERSION, } from './version.js';
3
+ const Id = z.string().min(1).max(200);
4
+ const Timestamp = z.string().datetime({ offset: true });
5
+ export const RuntimeTargetSchema = z.object({
6
+ runtime: z.string().min(1),
7
+ kind: z.enum(['goal', 'session', 'conversation', 'task', 'spawn_template']),
8
+ id: Id,
9
+ });
10
+ export const EventSourceSchema = z.object({
11
+ serverId: Id,
12
+ transport: z.enum(['stdio', 'streamable_http', 'webhook', 'poll', 'internal']),
13
+ provider: z.string().min(1).optional(),
14
+ cursor: z.string().nullable().optional(),
15
+ });
16
+ export const EventLineageSchema = z.object({
17
+ protocol: z.literal(EVENT_INTELLIGENCE_PROTOCOL),
18
+ protocolVersion: z.literal(EVENT_INTELLIGENCE_PROTOCOL_VERSION),
19
+ schemaVersion: z.literal(EVENT_INTELLIGENCE_SCHEMA_VERSION),
20
+ traceId: Id,
21
+ environmentId: Id,
22
+ subscriptionId: Id,
23
+ sourceEventId: Id,
24
+ observedAt: Timestamp,
25
+ source: EventSourceSchema,
26
+ target: RuntimeTargetSchema,
27
+ event: z.object({
28
+ name: z.string().min(1),
29
+ occurredAt: Timestamp,
30
+ payloadHash: z.string().regex(/^[a-f0-9]{64}$/),
31
+ }),
32
+ });
33
+ export const SemanticDecisionRecordSchema = z.object({
34
+ decisionId: Id,
35
+ traceId: Id,
36
+ subscriptionId: Id,
37
+ sourceEventId: Id,
38
+ createdAt: Timestamp,
39
+ evaluator: z.string().min(1),
40
+ outcome: z.enum(['match', 'reject', 'uncertain']),
41
+ probability: z.number().min(0).max(1),
42
+ matched: z.boolean(),
43
+ shouldEscalate: z.boolean(),
44
+ policy: z.object({
45
+ matchThreshold: z.number().min(0).max(1),
46
+ rejectThreshold: z.number().min(0).max(1),
47
+ uncertain: z.enum(['escalate', 'reject', 'match']),
48
+ }),
49
+ inputFields: z.array(z.string().min(1)),
50
+ providerEvidence: z.object({
51
+ requestedModel: z.string().min(1).optional(),
52
+ resolvedModel: z.string().min(1).optional(),
53
+ requestId: z.string().min(1).optional(),
54
+ httpStatus: z.number().int().min(100).max(599).optional(),
55
+ inputTokens: z.number().int().nonnegative().optional(),
56
+ outputTokens: z.number().int().nonnegative().optional(),
57
+ providerReportedCost: z.number().nonnegative().optional(),
58
+ }).optional(),
59
+ });
60
+ export const WakeRecordSchema = z.object({
61
+ wakeId: Id,
62
+ traceId: Id,
63
+ decisionId: Id.nullable(),
64
+ subscriptionId: Id,
65
+ sourceEventId: Id,
66
+ createdAt: Timestamp,
67
+ target: RuntimeTargetSchema,
68
+ status: z.enum(['queued', 'delivered', 'handled', 'duplicate', 'dead_letter']),
69
+ runtimeReceiptId: Id.optional(),
70
+ });
71
+ export const McpEventOccurrenceSchema = z.object({
72
+ eventId: Id,
73
+ name: z.string().min(1),
74
+ timestamp: Timestamp,
75
+ data: z.record(z.string(), z.unknown()),
76
+ cursor: z.string().nullable().optional(),
77
+ });
78
+ export const SemanticConditionWireSchema = z.object({
79
+ type: z.literal('semantic_boolean'),
80
+ instruction: z.string().min(1),
81
+ input: z.array(z.string().min(1)).min(1),
82
+ matchThreshold: z.number().min(0).max(1),
83
+ rejectThreshold: z.number().min(0).max(1),
84
+ uncertain: z.enum(['escalate', 'reject', 'match']),
85
+ });
86
+ export const EventIngestRequestSchema = z.object({
87
+ event: McpEventOccurrenceSchema,
88
+ context: z.object({
89
+ traceId: Id.optional(),
90
+ environmentId: Id,
91
+ subscriptionId: Id,
92
+ serverId: Id,
93
+ transport: z.enum(['stdio', 'streamable_http', 'webhook', 'poll', 'internal']),
94
+ provider: z.string().min(1).optional(),
95
+ target: RuntimeTargetSchema,
96
+ }),
97
+ semanticCondition: SemanticConditionWireSchema.optional(),
98
+ wakeOnEscalation: z.boolean().default(false),
99
+ });
100
+ export const LifecycleStateSchema = z.enum([
101
+ 'received',
102
+ 'duplicate',
103
+ 'evaluating',
104
+ 'matched',
105
+ 'rejected',
106
+ 'escalated',
107
+ 'wake_queued',
108
+ 'wake_delivered',
109
+ 'handled',
110
+ 'failed',
111
+ 'dead_letter',
112
+ ]);
113
+ export const AuditKindSchema = z.enum([
114
+ 'event.received',
115
+ 'event.duplicate',
116
+ 'decision.evaluated',
117
+ 'lifecycle.transition',
118
+ 'wake.queued',
119
+ 'wake.delivered',
120
+ 'wake.handled',
121
+ 'wake.dead_letter',
122
+ 'trigger.partial',
123
+ 'trigger.correlation',
124
+ 'trigger.matched',
125
+ 'trigger.fired',
126
+ 'trigger.emitted',
127
+ 'trigger.expired',
128
+ 'trigger.created',
129
+ 'trigger.paused',
130
+ 'trigger.resumed',
131
+ 'trigger.updated',
132
+ 'trigger.deleted',
133
+ 'trigger.completed',
134
+ 'trigger.lifecycle_expired',
135
+ 'event_source.registered',
136
+ 'derived_event.created',
137
+ 'derived_event.replayed',
138
+ 'derived_contract.created',
139
+ 'derived_contract.producer_registered',
140
+ 'derived_contract.conflict',
141
+ 'error',
142
+ ]);
143
+ export const AuditRecordSchema = z.object({
144
+ auditId: Id,
145
+ sequence: z.number().int().nonnegative(),
146
+ traceId: Id,
147
+ timestamp: Timestamp,
148
+ kind: AuditKindSchema,
149
+ entityType: z.enum([
150
+ 'event',
151
+ 'decision',
152
+ 'wake',
153
+ 'subscription',
154
+ 'runtime',
155
+ 'trigger_match',
156
+ 'trigger',
157
+ 'event_source',
158
+ 'derived_event',
159
+ 'derived_contract',
160
+ ]),
161
+ entityId: Id,
162
+ fromState: LifecycleStateSchema.nullable().optional(),
163
+ toState: LifecycleStateSchema.nullable().optional(),
164
+ details: z.record(z.string(), z.unknown()).default({}),
165
+ previousHash: z.string().regex(/^[a-f0-9]{64}$/).nullable(),
166
+ hash: z.string().regex(/^[a-f0-9]{64}$/),
167
+ });
168
+ export function parseEventIngestRequest(value) {
169
+ return EventIngestRequestSchema.parse(value);
170
+ }
171
+ export function parseEventLineage(value) {
172
+ return EventLineageSchema.parse(value);
173
+ }
174
+ export function parseSemanticDecisionRecord(value) {
175
+ return SemanticDecisionRecordSchema.parse(value);
176
+ }
177
+ export function parseWakeRecord(value) {
178
+ return WakeRecordSchema.parse(value);
179
+ }
180
+ export function parseAuditRecord(value) {
181
+ return AuditRecordSchema.parse(value);
182
+ }