mcp-event-intelligence 0.8.2 → 0.9.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.
- package/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/conformance/README.md +59 -0
- package/conformance/fixtures/composite-trigger.valid.json +70 -0
- package/conformance/fixtures/event-lineage.valid.json +26 -0
- package/conformance/reference-host.mjs +145 -0
- package/package.json +15 -3
- package/scripts/embedded-host-kit.mjs +4 -0
- package/scripts/host-conformance.d.mts +75 -0
- package/scripts/host-conformance.mjs +238 -0
- package/scripts/host-integration.d.mts +5 -0
- package/scripts/host-integration.mjs +23 -4
- package/scripts/lib/composite-event-consumer.mjs +28 -0
- package/scripts/lib/composite-wake-coordinator.mjs +64 -0
- package/scripts/lib/local-event-intelligence-runtime.mjs +39 -0
- package/scripts/lib/mcp-events-client.mjs +36 -0
- package/scripts/lib/observability.d.mts +77 -0
- package/scripts/lib/observability.mjs +134 -0
- package/scripts/lib/temporal-deadline-scheduler.mjs +10 -0
- package/scripts/lib/trigger-control-plane.mjs +26 -0
- package/scripts/lib/wake-retry-scheduler.mjs +10 -0
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.0] - 2026-10-05
|
|
4
|
+
|
|
5
|
+
### Runtime-neutral observability
|
|
6
|
+
|
|
7
|
+
- add the public `mcp-event-intelligence/observability` surface for structured operational `ei.*` events;
|
|
8
|
+
- cover lifecycle, MCP/event-source health, trigger mutations, matches, wake delivery, retry/dead-letter and scheduler failures;
|
|
9
|
+
- keep observability best-effort and non-blocking so slow or failing telemetry sinks cannot change Event Intelligence execution semantics;
|
|
10
|
+
- defensively exclude event payloads, evidence, continuation instructions and credential-like metadata from operational events;
|
|
11
|
+
- keep audit and observability separate: the audit chain remains durable and tamper-evident while observability stays host-owned and ephemeral.
|
|
12
|
+
|
|
13
|
+
### Host conformance
|
|
14
|
+
|
|
15
|
+
- add the public `mcp-event-intelligence/conformance` runner with a six-method runtime-neutral host adapter contract;
|
|
16
|
+
- emit machine-readable `event-intelligence.host-conformance.v1` reports;
|
|
17
|
+
- verify threshold/one-shot behavior, replay deduplication on persistent triggers, restart durability, bounded `maxFirings`, required observability and payload non-leakage;
|
|
18
|
+
- add a real embedded reference host and `npm run conformance:host`;
|
|
19
|
+
- document the integration contract without introducing Muffin, Artemis, OpenAI, Anthropic or logger-vendor adapters into EI core.
|
|
20
|
+
|
|
21
|
+
|
|
3
22
|
## [0.8.2] - 2026-10-05
|
|
4
23
|
|
|
5
24
|
### Embedded integration
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/sarooo17/event-intelligence/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/mcp-event-intelligence)
|
|
7
|
-
[](https://registry.modelcontextprotocol.io/?q=io.github.sarooo17%2Fevent-intelligence)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
10
|
MCP Event Intelligence is an experimental event runtime for agents that need to react to **future conditions over multiple event sources** without keeping an LLM or agent loop alive.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Host conformance
|
|
2
|
+
|
|
3
|
+
Event Intelligence ships two separate conformance layers.
|
|
4
|
+
|
|
5
|
+
## Runtime contract conformance
|
|
6
|
+
|
|
7
|
+
The existing fixtures and regression suite validate EI's own protocol, Pattern,
|
|
8
|
+
storage, audit and MCP Events boundaries.
|
|
9
|
+
|
|
10
|
+
A conforming EI adapter must preserve canonical schemas, stable event identity,
|
|
11
|
+
source evidence, lifecycle correctness, replay deduplication, hash-linked audit
|
|
12
|
+
history and the rule that external event data is evidence rather than
|
|
13
|
+
authorization.
|
|
14
|
+
|
|
15
|
+
Run the full internal suite with:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm run check
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Embedded host conformance
|
|
22
|
+
|
|
23
|
+
The public `mcp-event-intelligence/conformance` entry point validates an
|
|
24
|
+
embedding runtime without teaching EI about that runtime.
|
|
25
|
+
|
|
26
|
+
Implement `createHarness({ observability })` and return six operations:
|
|
27
|
+
|
|
28
|
+
- `createTrigger()`
|
|
29
|
+
- `emitEvent()`
|
|
30
|
+
- `deliveries()`
|
|
31
|
+
- `restart()`
|
|
32
|
+
- `inspectTrigger()`
|
|
33
|
+
- `close()`
|
|
34
|
+
|
|
35
|
+
Then run:
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
import { runHostConformance } from 'mcp-event-intelligence/conformance';
|
|
39
|
+
|
|
40
|
+
const report = await runHostConformance(myRuntimeAdapter, {
|
|
41
|
+
throwOnFailure: true,
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Core v1 checks cover one-shot delivery, replay deduplication, restart
|
|
46
|
+
persistence, bounded `maxFirings`, and required structured observability
|
|
47
|
+
(`ei.trigger.created`, `ei.match.matched`, `ei.wake.delivered`).
|
|
48
|
+
|
|
49
|
+
The scenarios are intentionally isolated and synthetic. Do not point the
|
|
50
|
+
conformance harness at production continuations or production event sources.
|
|
51
|
+
|
|
52
|
+
The repository reference adapter can be run with:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm run conformance:host
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The MCP Events draft remains upstream and experimental. These checks certify
|
|
59
|
+
Event Intelligence host behavior, not official MCP conformance.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"protocolVersion": "0.2.0",
|
|
3
|
+
"schemaVersion": "trigger.v0.2",
|
|
4
|
+
"triggerId": "issue-and-pippo-mail",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"description": "Wake only when an issue exists and Pippo sends a related email.",
|
|
7
|
+
"clauses": [
|
|
8
|
+
{
|
|
9
|
+
"id": "issue",
|
|
10
|
+
"event": "github.issue.opened",
|
|
11
|
+
"where": [
|
|
12
|
+
{
|
|
13
|
+
"path": "repository",
|
|
14
|
+
"op": "eq",
|
|
15
|
+
"value": "acme/app"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "mail",
|
|
21
|
+
"event": "email.received",
|
|
22
|
+
"where": [
|
|
23
|
+
{
|
|
24
|
+
"path": "from",
|
|
25
|
+
"op": "eq",
|
|
26
|
+
"value": "pippo@example.com"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"pattern": {
|
|
32
|
+
"version": "2",
|
|
33
|
+
"root": {
|
|
34
|
+
"kind": "semantic",
|
|
35
|
+
"id": "same-problem",
|
|
36
|
+
"refs": [
|
|
37
|
+
"issue",
|
|
38
|
+
"mail"
|
|
39
|
+
],
|
|
40
|
+
"instruction": "The email concerns the GitHub issue.",
|
|
41
|
+
"input": [
|
|
42
|
+
"issue.title",
|
|
43
|
+
"mail.subject",
|
|
44
|
+
"mail.bodyPreview"
|
|
45
|
+
],
|
|
46
|
+
"matchThreshold": 0.8,
|
|
47
|
+
"rejectThreshold": 0.2,
|
|
48
|
+
"uncertain": "escalate",
|
|
49
|
+
"child": {
|
|
50
|
+
"kind": "allOf",
|
|
51
|
+
"children": [
|
|
52
|
+
{
|
|
53
|
+
"kind": "event",
|
|
54
|
+
"ref": "issue"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"kind": "event",
|
|
58
|
+
"ref": "mail"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"withinMs": 86400000,
|
|
65
|
+
"target": {
|
|
66
|
+
"runtime": "runtime-probe",
|
|
67
|
+
"kind": "task",
|
|
68
|
+
"id": "issue-report"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"protocol": "mcp-event-intelligence",
|
|
3
|
+
"protocolVersion": "0.1.0",
|
|
4
|
+
"schemaVersion": "ei.v0.1",
|
|
5
|
+
"traceId": "trace_fixture_001",
|
|
6
|
+
"environmentId": "env_test",
|
|
7
|
+
"subscriptionId": "sub_fixture",
|
|
8
|
+
"sourceEventId": "evt_fixture",
|
|
9
|
+
"observedAt": "2026-09-18T06:30:00.000Z",
|
|
10
|
+
"source": {
|
|
11
|
+
"serverId": "github-mcp",
|
|
12
|
+
"transport": "webhook",
|
|
13
|
+
"provider": "github",
|
|
14
|
+
"cursor": null
|
|
15
|
+
},
|
|
16
|
+
"target": {
|
|
17
|
+
"runtime": "openai-agents",
|
|
18
|
+
"kind": "session",
|
|
19
|
+
"id": "session_fixture"
|
|
20
|
+
},
|
|
21
|
+
"event": {
|
|
22
|
+
"name": "issue.opened",
|
|
23
|
+
"occurredAt": "2026-09-18T06:29:59.000Z",
|
|
24
|
+
"payloadHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { createEventIntelligenceHost } from '../scripts/host-integration.mjs';
|
|
5
|
+
import { runHostConformance } from '../scripts/host-conformance.mjs';
|
|
6
|
+
|
|
7
|
+
export const referenceHostAdapter = {
|
|
8
|
+
name: 'event-intelligence-reference-host',
|
|
9
|
+
|
|
10
|
+
async createHarness({ observability }) {
|
|
11
|
+
const dataDir = await mkdtemp(path.join(os.tmpdir(), 'ei-host-conformance-'));
|
|
12
|
+
const externalDeliveries = [];
|
|
13
|
+
let host = null;
|
|
14
|
+
|
|
15
|
+
const start = async () => {
|
|
16
|
+
host = await createEventIntelligenceHost({
|
|
17
|
+
dataDir,
|
|
18
|
+
observability,
|
|
19
|
+
env: {
|
|
20
|
+
TYPESAFE_API_KEY: '',
|
|
21
|
+
RUNTIME_WAKE_TARGETS_JSON: '{}',
|
|
22
|
+
TEMPORAL_TICK_MS: '100000',
|
|
23
|
+
WAKE_RETRY_TICK_MS: '100000',
|
|
24
|
+
},
|
|
25
|
+
wake: async (packet, activation) => {
|
|
26
|
+
const runtimeReceiptId = `conformance:${packet.wake_id}`;
|
|
27
|
+
externalDeliveries.push({
|
|
28
|
+
triggerId: activation.trigger.triggerId,
|
|
29
|
+
wakeId: packet.wake_id,
|
|
30
|
+
runtimeReceiptId,
|
|
31
|
+
});
|
|
32
|
+
return { runtimeReceiptId };
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
await start();
|
|
38
|
+
|
|
39
|
+
await host.triggerControl.registerEventSource({
|
|
40
|
+
sourceId: 'conformance:value-changed',
|
|
41
|
+
connectionId: 'conformance-connection',
|
|
42
|
+
serverId: 'conformance',
|
|
43
|
+
eventName: 'conformance.value.changed',
|
|
44
|
+
delivery: ['poll'],
|
|
45
|
+
payloadSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
additionalProperties: false,
|
|
48
|
+
required: ['value'],
|
|
49
|
+
properties: {
|
|
50
|
+
value: { type: 'number' },
|
|
51
|
+
secretProbe: { type: 'string' },
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
enabled: true,
|
|
55
|
+
}, {
|
|
56
|
+
type: 'system',
|
|
57
|
+
principal_id: 'host-conformance',
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
async createTrigger({
|
|
62
|
+
triggerId,
|
|
63
|
+
threshold,
|
|
64
|
+
oneShot,
|
|
65
|
+
maxFirings,
|
|
66
|
+
}) {
|
|
67
|
+
const planned = await host.planTrigger({
|
|
68
|
+
triggerId,
|
|
69
|
+
events: [{
|
|
70
|
+
id: 'value',
|
|
71
|
+
event: 'conformance.value.changed',
|
|
72
|
+
serverId: 'conformance',
|
|
73
|
+
where: [{
|
|
74
|
+
path: 'value',
|
|
75
|
+
op: 'gt',
|
|
76
|
+
value: threshold,
|
|
77
|
+
}],
|
|
78
|
+
}],
|
|
79
|
+
lifecycle: {
|
|
80
|
+
oneShot,
|
|
81
|
+
...(maxFirings === undefined ? {} : { maxFirings }),
|
|
82
|
+
},
|
|
83
|
+
target: {
|
|
84
|
+
runtime: 'conformance-host',
|
|
85
|
+
kind: 'task',
|
|
86
|
+
id: triggerId,
|
|
87
|
+
},
|
|
88
|
+
continuation: {
|
|
89
|
+
instruction: 'Continue the isolated Event Intelligence conformance scenario.',
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
await host.triggerControl.createTrigger({
|
|
94
|
+
definition: planned.definition,
|
|
95
|
+
connectionIds: planned.connectionIds,
|
|
96
|
+
actor: { type: 'user', principal_id: 'host-conformance-user' },
|
|
97
|
+
owner: { type: 'user', principal_id: 'host-conformance-user' },
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
async emitEvent({ eventId, value, secretProbe }) {
|
|
102
|
+
await host.runtime.compositeEventConsumer.ingestCorrelatable({
|
|
103
|
+
traceId: `conformance:${eventId}`,
|
|
104
|
+
sourceEventId: eventId,
|
|
105
|
+
name: 'conformance.value.changed',
|
|
106
|
+
serverId: 'conformance',
|
|
107
|
+
provider: 'conformance',
|
|
108
|
+
occurredAt: new Date().toISOString(),
|
|
109
|
+
data: {
|
|
110
|
+
value,
|
|
111
|
+
...(secretProbe ? { secretProbe } : {}),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
deliveries() {
|
|
117
|
+
return [...externalDeliveries];
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
async restart() {
|
|
121
|
+
await host.close();
|
|
122
|
+
await start();
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
async inspectTrigger(triggerId) {
|
|
126
|
+
const rows = await host.triggerControl.listTriggers();
|
|
127
|
+
const entry = rows.find(
|
|
128
|
+
(candidate) => candidate.definition.triggerId === triggerId,
|
|
129
|
+
);
|
|
130
|
+
return entry?.state ?? null;
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
async close() {
|
|
134
|
+
await host?.close();
|
|
135
|
+
await rm(dataDir, { recursive: true, force: true });
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
142
|
+
const report = await runHostConformance(referenceHostAdapter);
|
|
143
|
+
console.log(JSON.stringify(report, null, 2));
|
|
144
|
+
if (!report.passed) process.exitCode = 1;
|
|
145
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-event-intelligence",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "MCP-native complex event processing for durable agent workflows: event-time patterns, semantic predicates, derived events, and targeted wakeups.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -26,6 +26,14 @@
|
|
|
26
26
|
"./embedded": {
|
|
27
27
|
"types": "./scripts/embedded-host-kit.d.mts",
|
|
28
28
|
"import": "./scripts/embedded-host-kit.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./observability": {
|
|
31
|
+
"types": "./scripts/lib/observability.d.mts",
|
|
32
|
+
"import": "./scripts/lib/observability.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./conformance": {
|
|
35
|
+
"types": "./scripts/host-conformance.d.mts",
|
|
36
|
+
"import": "./scripts/host-conformance.mjs"
|
|
29
37
|
}
|
|
30
38
|
},
|
|
31
39
|
"bin": {
|
|
@@ -47,7 +55,10 @@
|
|
|
47
55
|
"scripts/host-integration.d.mts",
|
|
48
56
|
"scripts/run-tests.mjs",
|
|
49
57
|
"scripts/embedded-host-kit.mjs",
|
|
50
|
-
"scripts/embedded-host-kit.d.mts"
|
|
58
|
+
"scripts/embedded-host-kit.d.mts",
|
|
59
|
+
"scripts/host-conformance.mjs",
|
|
60
|
+
"scripts/host-conformance.d.mts",
|
|
61
|
+
"conformance/"
|
|
51
62
|
],
|
|
52
63
|
"scripts": {
|
|
53
64
|
"build": "tsc -p tsconfig.json",
|
|
@@ -64,7 +75,8 @@
|
|
|
64
75
|
"conformance:pattern-v2": "npm run build && node scripts/evidence/pattern-v2-conformance.mjs",
|
|
65
76
|
"bench:pattern-v2": "npm run build && node scripts/evidence/pattern-v2-benchmark.mjs --profile quick",
|
|
66
77
|
"evidence:pattern-v2": "npm run build && node scripts/evidence/pattern-v2-conformance.mjs && node scripts/evidence/pattern-v2-benchmark.mjs --profile quick",
|
|
67
|
-
"prepare": "npm run build"
|
|
78
|
+
"prepare": "npm run build",
|
|
79
|
+
"conformance:host": "npm run build && node conformance/reference-host.mjs"
|
|
68
80
|
},
|
|
69
81
|
"keywords": [
|
|
70
82
|
"mcp",
|
|
@@ -903,6 +903,7 @@ export async function createEmbeddedEventIntelligence({
|
|
|
903
903
|
mcp,
|
|
904
904
|
mcpClients = [],
|
|
905
905
|
semanticEvaluator,
|
|
906
|
+
observability,
|
|
906
907
|
activation,
|
|
907
908
|
wake,
|
|
908
909
|
wakeHandlers = {},
|
|
@@ -932,6 +933,7 @@ export async function createEmbeddedEventIntelligence({
|
|
|
932
933
|
mcpRegistry: registry,
|
|
933
934
|
mcpClients,
|
|
934
935
|
semanticEvaluator,
|
|
936
|
+
observability,
|
|
935
937
|
...(wakeHandler ? { wake: wakeHandler } : {}),
|
|
936
938
|
wakeHandlers,
|
|
937
939
|
});
|
|
@@ -983,6 +985,7 @@ export async function createEmbeddedRuntimeIntegration({
|
|
|
983
985
|
eventSources,
|
|
984
986
|
mcpClients = [],
|
|
985
987
|
semanticEvaluator,
|
|
988
|
+
observability,
|
|
986
989
|
activation,
|
|
987
990
|
wake,
|
|
988
991
|
wakeHandlers = {},
|
|
@@ -1042,6 +1045,7 @@ export async function createEmbeddedRuntimeIntegration({
|
|
|
1042
1045
|
: {}),
|
|
1043
1046
|
mcpClients,
|
|
1044
1047
|
semanticEvaluator,
|
|
1048
|
+
observability,
|
|
1045
1049
|
activation,
|
|
1046
1050
|
wake,
|
|
1047
1051
|
wakeHandlers,
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EventIntelligenceObservabilityEvent,
|
|
3
|
+
} from './lib/observability.d.mts';
|
|
4
|
+
|
|
5
|
+
export interface HostConformanceTriggerInput {
|
|
6
|
+
triggerId: string;
|
|
7
|
+
threshold: number;
|
|
8
|
+
oneShot: boolean;
|
|
9
|
+
maxFirings?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface HostConformanceEventInput {
|
|
13
|
+
eventId: string;
|
|
14
|
+
value: number;
|
|
15
|
+
secretProbe?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface HostConformanceDelivery {
|
|
19
|
+
triggerId: string;
|
|
20
|
+
wakeId?: string;
|
|
21
|
+
runtimeReceiptId?: string;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface HostConformanceHarness {
|
|
26
|
+
createTrigger(input: HostConformanceTriggerInput): Promise<void>;
|
|
27
|
+
emitEvent(input: HostConformanceEventInput): Promise<void>;
|
|
28
|
+
deliveries(): Promise<readonly HostConformanceDelivery[]> | readonly HostConformanceDelivery[];
|
|
29
|
+
restart(): Promise<void>;
|
|
30
|
+
inspectTrigger(triggerId: string): Promise<{
|
|
31
|
+
status?: string;
|
|
32
|
+
fireCount?: number;
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
} | null>;
|
|
35
|
+
close(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface HostConformanceAdapter {
|
|
39
|
+
name?: string;
|
|
40
|
+
createHarness(input: {
|
|
41
|
+
observability(event: EventIntelligenceObservabilityEvent): void;
|
|
42
|
+
}): Promise<HostConformanceHarness> | HostConformanceHarness;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface HostConformanceResult {
|
|
46
|
+
id: string;
|
|
47
|
+
status: 'pass' | 'fail';
|
|
48
|
+
durationMs: number;
|
|
49
|
+
detail?: unknown;
|
|
50
|
+
error?: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface HostConformanceReport {
|
|
54
|
+
schema: 'event-intelligence.host-conformance.v1' | string;
|
|
55
|
+
adapter: string;
|
|
56
|
+
passed: boolean;
|
|
57
|
+
summary: {
|
|
58
|
+
total: number;
|
|
59
|
+
passed: number;
|
|
60
|
+
failed: number;
|
|
61
|
+
};
|
|
62
|
+
results: readonly HostConformanceResult[];
|
|
63
|
+
observability: {
|
|
64
|
+
captured: number;
|
|
65
|
+
eventNames: readonly string[];
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export const HOST_CONFORMANCE_REPORT_SCHEMA:
|
|
70
|
+
'event-intelligence.host-conformance.v1';
|
|
71
|
+
|
|
72
|
+
export function runHostConformance(
|
|
73
|
+
adapter: HostConformanceAdapter,
|
|
74
|
+
options?: { throwOnFailure?: boolean },
|
|
75
|
+
): Promise<HostConformanceReport>;
|