@lumenflow/control-plane-sdk 5.3.2 → 5.5.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/dist/a2a/conformance/cases.d.ts +47 -0
- package/dist/a2a/conformance/cases.d.ts.map +1 -0
- package/dist/a2a/conformance/cases.js +253 -0
- package/dist/a2a/conformance/cases.js.map +1 -0
- package/dist/a2a/conformance/index.d.ts +5 -0
- package/dist/a2a/conformance/index.d.ts.map +1 -0
- package/dist/a2a/conformance/index.js +7 -0
- package/dist/a2a/conformance/index.js.map +1 -0
- package/dist/a2a/conformance/runner.d.ts +23 -0
- package/dist/a2a/conformance/runner.d.ts.map +1 -0
- package/dist/a2a/conformance/runner.js +122 -0
- package/dist/a2a/conformance/runner.js.map +1 -0
- package/dist/a2a/index.d.ts +3 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +5 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/a2a/receipt.d.ts +34 -0
- package/dist/a2a/receipt.d.ts.map +1 -0
- package/dist/a2a/receipt.js +24 -0
- package/dist/a2a/receipt.js.map +1 -0
- package/dist/a2a/signal.d.ts +67 -0
- package/dist/a2a/signal.d.ts.map +1 -0
- package/dist/a2a/signal.js +53 -0
- package/dist/a2a/signal.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +11 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type A2AReceiptV1 } from '../receipt.js';
|
|
2
|
+
import { type A2ASignalV1 } from '../signal.js';
|
|
3
|
+
export interface A2AConformanceSignalQuery {
|
|
4
|
+
signal_id?: string;
|
|
5
|
+
workspace_id?: string;
|
|
6
|
+
wu_id?: string;
|
|
7
|
+
initiative?: string;
|
|
8
|
+
thread_id?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface A2AConformanceVisibilityQuery extends A2AConformanceSignalQuery {
|
|
11
|
+
reader_identity: string;
|
|
12
|
+
}
|
|
13
|
+
export interface A2AConformanceReceiptQuery {
|
|
14
|
+
receipt_id?: string;
|
|
15
|
+
signal_id?: string;
|
|
16
|
+
reader_identity?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface A2AConformanceDeliveryInput {
|
|
19
|
+
signal_id: string;
|
|
20
|
+
reader_identity: string;
|
|
21
|
+
receipt_id?: string;
|
|
22
|
+
idempotency_key?: string;
|
|
23
|
+
read_at?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface A2AConformanceSignalStore {
|
|
26
|
+
appendSignal(signal: unknown): Promise<A2ASignalV1>;
|
|
27
|
+
listSignals(query?: A2AConformanceSignalQuery): Promise<A2ASignalV1[]>;
|
|
28
|
+
listVisibleSignals(query: A2AConformanceVisibilityQuery): Promise<A2ASignalV1[]>;
|
|
29
|
+
}
|
|
30
|
+
export interface A2AConformanceReceiptStore {
|
|
31
|
+
markDelivered(input: A2AConformanceDeliveryInput): Promise<A2AReceiptV1>;
|
|
32
|
+
appendReceipt(receipt: unknown): Promise<A2AReceiptV1>;
|
|
33
|
+
listReceipts(query?: A2AConformanceReceiptQuery): Promise<A2AReceiptV1[]>;
|
|
34
|
+
}
|
|
35
|
+
export interface A2AConformanceStores {
|
|
36
|
+
signals: A2AConformanceSignalStore;
|
|
37
|
+
receipts: A2AConformanceReceiptStore;
|
|
38
|
+
}
|
|
39
|
+
export interface A2AConformanceCase {
|
|
40
|
+
name: string;
|
|
41
|
+
run(stores: A2AConformanceStores): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare const A2A_CONFORMANCE_CASES: A2AConformanceCase[];
|
|
44
|
+
export declare function isA2AThreadConverged(signals: A2ASignalV1[], rootSignalId: string): boolean;
|
|
45
|
+
export declare function matchesA2ASignalQuery(signal: A2ASignalV1, query?: A2AConformanceSignalQuery): boolean;
|
|
46
|
+
export declare function matchesA2AReceiptQuery(receipt: A2AReceiptV1, query?: A2AConformanceReceiptQuery): boolean;
|
|
47
|
+
//# sourceMappingURL=cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cases.d.ts","sourceRoot":"","sources":["../../../src/a2a/conformance/cases.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAmBnE,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA8B,SAAQ,yBAAyB;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,WAAW,CAAC,KAAK,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,kBAAkB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACzE,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,YAAY,CAAC,KAAK,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,yBAAyB,CAAC;IACnC,QAAQ,EAAE,0BAA0B,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAgOrD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAa1F;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,yBAA8B,GACpC,OAAO,CAQT;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EACrB,KAAK,GAAE,0BAA+B,GACrC,OAAO,CAMT"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
import { A2AReceiptV1Schema } from '../receipt.js';
|
|
5
|
+
import { A2ASignalV1Schema } from '../signal.js';
|
|
6
|
+
const SCHEMA_VERSION = 'A2A.V1';
|
|
7
|
+
const WORKSPACE_ONE = 'workspace-one';
|
|
8
|
+
const WORKSPACE_TWO = 'workspace-two';
|
|
9
|
+
const WU_ID = 'WU-2913';
|
|
10
|
+
const INIT_ID = 'INIT-066';
|
|
11
|
+
const THREAD_ID = 'thread-conformance';
|
|
12
|
+
const CREATED_AT = '2026-05-06T12:00:00.000Z';
|
|
13
|
+
const READ_AT = '2026-05-06T12:01:00.000Z';
|
|
14
|
+
const READER_A = 'claude:reviewer:host1';
|
|
15
|
+
const READER_B = 'codex:implementer:pid1';
|
|
16
|
+
const READER_C = 'gemini:observer:pid1';
|
|
17
|
+
const READER_D = 'cursor:outsider:pid1';
|
|
18
|
+
const SENDER = 'codex:architect:pid1';
|
|
19
|
+
const SIGNAL_ID = 'sig-conformance-root';
|
|
20
|
+
const RECEIPT_ID = 'rcpt-conformance';
|
|
21
|
+
const IDEMPOTENCY_KEY = 'idem-conformance';
|
|
22
|
+
export const A2A_CONFORMANCE_CASES = [
|
|
23
|
+
{
|
|
24
|
+
name: 'schema round-trip',
|
|
25
|
+
async run({ signals }) {
|
|
26
|
+
const signal = buildSignal({
|
|
27
|
+
signal_id: SIGNAL_ID,
|
|
28
|
+
recipients: [READER_A, READER_B],
|
|
29
|
+
requires_ack: true,
|
|
30
|
+
});
|
|
31
|
+
const stored = await signals.appendSignal(signal);
|
|
32
|
+
const [loaded] = await signals.listSignals({ signal_id: signal.signal_id });
|
|
33
|
+
assert.deepEqual(A2ASignalV1Schema.parse(JSON.parse(JSON.stringify(stored))), signal);
|
|
34
|
+
assert.deepEqual(loaded, signal);
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'per-recipient receipts and receipt idempotency',
|
|
39
|
+
async run({ signals, receipts }) {
|
|
40
|
+
const signal = await signals.appendSignal(buildSignal({
|
|
41
|
+
signal_id: 'sig-receipts',
|
|
42
|
+
recipients: [READER_A, READER_B],
|
|
43
|
+
}));
|
|
44
|
+
const deliveredA = await receipts.markDelivered({
|
|
45
|
+
signal_id: signal.signal_id,
|
|
46
|
+
reader_identity: READER_A,
|
|
47
|
+
receipt_id: 'rcpt-reader-a',
|
|
48
|
+
idempotency_key: 'idem-reader-a',
|
|
49
|
+
read_at: READ_AT,
|
|
50
|
+
});
|
|
51
|
+
await receipts.appendReceipt(deliveredA);
|
|
52
|
+
const deliveredB = await receipts.markDelivered({
|
|
53
|
+
signal_id: signal.signal_id,
|
|
54
|
+
reader_identity: READER_B,
|
|
55
|
+
receipt_id: 'rcpt-reader-b',
|
|
56
|
+
idempotency_key: 'idem-reader-b',
|
|
57
|
+
read_at: READ_AT,
|
|
58
|
+
});
|
|
59
|
+
const readerAReceipts = await receipts.listReceipts({
|
|
60
|
+
signal_id: signal.signal_id,
|
|
61
|
+
reader_identity: READER_A,
|
|
62
|
+
});
|
|
63
|
+
const readerBReceipts = await receipts.listReceipts({
|
|
64
|
+
signal_id: signal.signal_id,
|
|
65
|
+
reader_identity: READER_B,
|
|
66
|
+
});
|
|
67
|
+
assert.equal(deliveredA.delivery_state, 'delivered');
|
|
68
|
+
assert.equal(deliveredB.delivery_state, 'delivered');
|
|
69
|
+
assert.equal(readerAReceipts.length, 1);
|
|
70
|
+
assert.equal(readerBReceipts.length, 1);
|
|
71
|
+
assert.equal(readerAReceipts[0]?.reader_identity, READER_A);
|
|
72
|
+
assert.equal(readerBReceipts[0]?.reader_identity, READER_B);
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'receipt state machine',
|
|
77
|
+
async run({ signals, receipts }) {
|
|
78
|
+
const signal = await signals.appendSignal(buildSignal({
|
|
79
|
+
signal_id: 'sig-state-machine',
|
|
80
|
+
recipients: [READER_A, READER_B],
|
|
81
|
+
requires_ack: true,
|
|
82
|
+
}));
|
|
83
|
+
const delivered = await receipts.markDelivered({
|
|
84
|
+
signal_id: signal.signal_id,
|
|
85
|
+
reader_identity: READER_A,
|
|
86
|
+
receipt_id: RECEIPT_ID,
|
|
87
|
+
idempotency_key: IDEMPOTENCY_KEY,
|
|
88
|
+
read_at: READ_AT,
|
|
89
|
+
});
|
|
90
|
+
const acked = await receipts.appendReceipt({
|
|
91
|
+
...delivered,
|
|
92
|
+
delivery_state: 'acked',
|
|
93
|
+
read_at: '2026-05-06T12:02:00.000Z',
|
|
94
|
+
});
|
|
95
|
+
const regression = await receipts.appendReceipt({
|
|
96
|
+
...delivered,
|
|
97
|
+
delivery_state: 'delivered',
|
|
98
|
+
read_at: '2026-05-06T12:03:00.000Z',
|
|
99
|
+
});
|
|
100
|
+
const deliveredB = await receipts.markDelivered({
|
|
101
|
+
signal_id: signal.signal_id,
|
|
102
|
+
reader_identity: READER_B,
|
|
103
|
+
receipt_id: 'rcpt-rejected',
|
|
104
|
+
idempotency_key: 'idem-rejected',
|
|
105
|
+
read_at: '2026-05-06T12:04:00.000Z',
|
|
106
|
+
});
|
|
107
|
+
const rejected = await receipts.appendReceipt({
|
|
108
|
+
...deliveredB,
|
|
109
|
+
delivery_state: 'rejected',
|
|
110
|
+
read_at: '2026-05-06T12:05:00.000Z',
|
|
111
|
+
});
|
|
112
|
+
assert.equal(acked.delivery_state, 'acked');
|
|
113
|
+
assert.equal(regression.delivery_state, 'acked');
|
|
114
|
+
assert.equal(rejected.delivery_state, 'rejected');
|
|
115
|
+
assert.equal((await receipts.listReceipts({ receipt_id: delivered.receipt_id }))[0]?.delivery_state, 'acked');
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'N-recipient routing and workspace isolation',
|
|
120
|
+
async run({ signals }) {
|
|
121
|
+
const directed = await signals.appendSignal(buildSignal({
|
|
122
|
+
signal_id: 'sig-routing',
|
|
123
|
+
recipients: [READER_A, READER_B],
|
|
124
|
+
workspace_id: WORKSPACE_ONE,
|
|
125
|
+
wu_id: WU_ID,
|
|
126
|
+
initiative: INIT_ID,
|
|
127
|
+
}));
|
|
128
|
+
await signals.appendSignal(buildSignal({
|
|
129
|
+
signal_id: 'sig-other-workspace',
|
|
130
|
+
recipients: [READER_A],
|
|
131
|
+
workspace_id: WORKSPACE_TWO,
|
|
132
|
+
wu_id: 'WU-9999',
|
|
133
|
+
initiative: 'INIT-999',
|
|
134
|
+
}));
|
|
135
|
+
assert.deepEqual(await signalIds(signals.listVisibleSignals({ reader_identity: READER_A, workspace_id: WORKSPACE_ONE })), [directed.signal_id]);
|
|
136
|
+
assert.deepEqual(await signalIds(signals.listVisibleSignals({ reader_identity: READER_C, workspace_id: WORKSPACE_ONE })), []);
|
|
137
|
+
assert.deepEqual(await signalIds(signals.listVisibleSignals({
|
|
138
|
+
reader_identity: READER_C,
|
|
139
|
+
workspace_id: WORKSPACE_ONE,
|
|
140
|
+
wu_id: WU_ID,
|
|
141
|
+
})), [directed.signal_id]);
|
|
142
|
+
assert.deepEqual(await signalIds(signals.listVisibleSignals({
|
|
143
|
+
reader_identity: READER_D,
|
|
144
|
+
workspace_id: WORKSPACE_TWO,
|
|
145
|
+
wu_id: WU_ID,
|
|
146
|
+
})), []);
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'thread integrity and convergence',
|
|
151
|
+
async run({ signals }) {
|
|
152
|
+
const root = await signals.appendSignal(buildSignal({
|
|
153
|
+
signal_id: 'sig-thread-root',
|
|
154
|
+
recipients: [READER_A, READER_B],
|
|
155
|
+
thread_id: THREAD_ID,
|
|
156
|
+
intent: 'PROPOSE',
|
|
157
|
+
requires_ack: true,
|
|
158
|
+
}));
|
|
159
|
+
await signals.appendSignal(buildSignal({
|
|
160
|
+
signal_id: 'sig-thread-ack-a',
|
|
161
|
+
recipients: [SENDER],
|
|
162
|
+
sender_identity: READER_A,
|
|
163
|
+
thread_id: THREAD_ID,
|
|
164
|
+
reply_to: root.signal_id,
|
|
165
|
+
intent: 'AGREE',
|
|
166
|
+
}));
|
|
167
|
+
const partialThread = await signals.listSignals({ thread_id: THREAD_ID });
|
|
168
|
+
await signals.appendSignal(buildSignal({
|
|
169
|
+
signal_id: 'sig-thread-ack-b',
|
|
170
|
+
recipients: [SENDER],
|
|
171
|
+
sender_identity: READER_B,
|
|
172
|
+
thread_id: THREAD_ID,
|
|
173
|
+
reply_to: root.signal_id,
|
|
174
|
+
intent: 'AGREE',
|
|
175
|
+
}));
|
|
176
|
+
const fullThread = await signals.listSignals({ thread_id: THREAD_ID });
|
|
177
|
+
assert.deepEqual(partialThread.map((signal) => signal.reply_to), [undefined, root.signal_id]);
|
|
178
|
+
assert.equal(isA2AThreadConverged(partialThread, root.signal_id), false);
|
|
179
|
+
assert.equal(isA2AThreadConverged(fullThread, root.signal_id), true);
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'schema version enforcement',
|
|
184
|
+
async run({ signals, receipts }) {
|
|
185
|
+
await assert.rejects(signals.appendSignal({
|
|
186
|
+
...buildSignal({ signal_id: 'sig-invalid-version' }),
|
|
187
|
+
schema_version: 'A2A.V2',
|
|
188
|
+
}));
|
|
189
|
+
await assert.rejects(receipts.appendReceipt({
|
|
190
|
+
...buildReceipt({ receipt_id: 'rcpt-invalid-version' }),
|
|
191
|
+
schema_version: 'A2A.V2',
|
|
192
|
+
}));
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
export function isA2AThreadConverged(signals, rootSignalId) {
|
|
197
|
+
const root = signals.find((signal) => signal.signal_id === rootSignalId);
|
|
198
|
+
if (!root) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const agreeingSenders = new Set(signals
|
|
202
|
+
.filter((signal) => signal.thread_id === root.thread_id)
|
|
203
|
+
.filter((signal) => signal.reply_to === root.signal_id)
|
|
204
|
+
.filter((signal) => signal.intent === 'AGREE')
|
|
205
|
+
.map((signal) => signal.sender_identity));
|
|
206
|
+
return root.recipients.every((recipient) => agreeingSenders.has(recipient));
|
|
207
|
+
}
|
|
208
|
+
export function matchesA2ASignalQuery(signal, query = {}) {
|
|
209
|
+
return ((query.signal_id === undefined || signal.signal_id === query.signal_id) &&
|
|
210
|
+
(query.workspace_id === undefined || signal.workspace_id === query.workspace_id) &&
|
|
211
|
+
(query.wu_id === undefined || signal.wu_id === query.wu_id) &&
|
|
212
|
+
(query.initiative === undefined || signal.initiative === query.initiative) &&
|
|
213
|
+
(query.thread_id === undefined || signal.thread_id === query.thread_id));
|
|
214
|
+
}
|
|
215
|
+
export function matchesA2AReceiptQuery(receipt, query = {}) {
|
|
216
|
+
return ((query.receipt_id === undefined || receipt.receipt_id === query.receipt_id) &&
|
|
217
|
+
(query.signal_id === undefined || receipt.signal_id === query.signal_id) &&
|
|
218
|
+
(query.reader_identity === undefined || receipt.reader_identity === query.reader_identity));
|
|
219
|
+
}
|
|
220
|
+
function buildSignal(overrides = {}) {
|
|
221
|
+
return A2ASignalV1Schema.parse({
|
|
222
|
+
schema_version: SCHEMA_VERSION,
|
|
223
|
+
signal_id: SIGNAL_ID,
|
|
224
|
+
workspace_id: WORKSPACE_ONE,
|
|
225
|
+
sender_identity: SENDER,
|
|
226
|
+
recipients: [READER_A],
|
|
227
|
+
thread_id: THREAD_ID,
|
|
228
|
+
message: 'A2A conformance signal',
|
|
229
|
+
created_at: CREATED_AT,
|
|
230
|
+
idempotency_key: `idem-${overrides.signal_id ?? SIGNAL_ID}`,
|
|
231
|
+
origin: 'local',
|
|
232
|
+
wu_id: WU_ID,
|
|
233
|
+
initiative: INIT_ID,
|
|
234
|
+
lane: 'Framework: ControlPlaneSdk',
|
|
235
|
+
...overrides,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
function buildReceipt(overrides = {}) {
|
|
239
|
+
return A2AReceiptV1Schema.parse({
|
|
240
|
+
schema_version: SCHEMA_VERSION,
|
|
241
|
+
receipt_id: RECEIPT_ID,
|
|
242
|
+
signal_id: SIGNAL_ID,
|
|
243
|
+
reader_identity: READER_A,
|
|
244
|
+
read_at: READ_AT,
|
|
245
|
+
delivery_state: 'delivered',
|
|
246
|
+
idempotency_key: IDEMPOTENCY_KEY,
|
|
247
|
+
...overrides,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
async function signalIds(signals) {
|
|
251
|
+
return (await signals).map((signal) => signal.signal_id);
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../src/a2a/conformance/cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/conformance/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/conformance/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type A2AConformanceCase, type A2AConformanceStores } from './cases.js';
|
|
2
|
+
export interface A2AConformanceSuiteOptions {
|
|
3
|
+
createStores: () => A2AConformanceStores | Promise<A2AConformanceStores>;
|
|
4
|
+
cases?: A2AConformanceCase[];
|
|
5
|
+
}
|
|
6
|
+
export interface A2AConformanceCaseResult {
|
|
7
|
+
name: string;
|
|
8
|
+
passed: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface A2AConformanceSuiteResult {
|
|
12
|
+
passed: boolean;
|
|
13
|
+
total: number;
|
|
14
|
+
failed: number;
|
|
15
|
+
results: A2AConformanceCaseResult[];
|
|
16
|
+
}
|
|
17
|
+
export declare class A2AConformanceError extends Error {
|
|
18
|
+
readonly result: A2AConformanceSuiteResult;
|
|
19
|
+
constructor(result: A2AConformanceSuiteResult);
|
|
20
|
+
}
|
|
21
|
+
export declare function runA2AConformanceSuite(options: A2AConformanceSuiteOptions): Promise<A2AConformanceSuiteResult>;
|
|
22
|
+
export declare function createInMemoryA2AConformanceStores(): A2AConformanceStores;
|
|
23
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/a2a/conformance/runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,kBAAkB,EAMvB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,MAAM,EAAE,yBAAyB;gBAAjC,MAAM,EAAE,yBAAyB;CAQvD;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CA8BpC;AAED,wBAAgB,kCAAkC,IAAI,oBAAoB,CAIzE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
|
|
3
|
+
import { A2A_CONFORMANCE_CASES, matchesA2AReceiptQuery, matchesA2ASignalQuery, } from './cases.js';
|
|
4
|
+
import { A2AReceiptV1Schema } from '../receipt.js';
|
|
5
|
+
import { A2ASignalV1Schema } from '../signal.js';
|
|
6
|
+
export class A2AConformanceError extends Error {
|
|
7
|
+
result;
|
|
8
|
+
constructor(result) {
|
|
9
|
+
const failedNames = result.results
|
|
10
|
+
.filter((caseResult) => !caseResult.passed)
|
|
11
|
+
.map((caseResult) => `${caseResult.name}: ${caseResult.error ?? 'failed'}`)
|
|
12
|
+
.join('; ');
|
|
13
|
+
super(`A2A conformance suite failed: ${failedNames}`);
|
|
14
|
+
this.result = result;
|
|
15
|
+
this.name = 'A2AConformanceError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function runA2AConformanceSuite(options) {
|
|
19
|
+
const cases = options.cases ?? A2A_CONFORMANCE_CASES;
|
|
20
|
+
const results = [];
|
|
21
|
+
for (const conformanceCase of cases) {
|
|
22
|
+
const stores = await options.createStores();
|
|
23
|
+
try {
|
|
24
|
+
await conformanceCase.run(stores);
|
|
25
|
+
results.push({ name: conformanceCase.name, passed: true });
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
results.push({
|
|
29
|
+
name: conformanceCase.name,
|
|
30
|
+
passed: false,
|
|
31
|
+
error: error instanceof Error ? error.message : String(error),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const failed = results.filter((caseResult) => !caseResult.passed).length;
|
|
36
|
+
const result = {
|
|
37
|
+
passed: failed === 0,
|
|
38
|
+
total: results.length,
|
|
39
|
+
failed,
|
|
40
|
+
results,
|
|
41
|
+
};
|
|
42
|
+
if (failed > 0) {
|
|
43
|
+
throw new A2AConformanceError(result);
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
export function createInMemoryA2AConformanceStores() {
|
|
48
|
+
const signals = new InMemoryA2ASignalStore();
|
|
49
|
+
const receipts = new InMemoryA2AReceiptStore();
|
|
50
|
+
return { signals, receipts };
|
|
51
|
+
}
|
|
52
|
+
class InMemoryA2ASignalStore {
|
|
53
|
+
signals = [];
|
|
54
|
+
async appendSignal(signal) {
|
|
55
|
+
const parsed = A2ASignalV1Schema.parse(signal);
|
|
56
|
+
const existing = this.signals.find((candidate) => {
|
|
57
|
+
return (candidate.signal_id === parsed.signal_id ||
|
|
58
|
+
(parsed.idempotency_key !== undefined &&
|
|
59
|
+
candidate.idempotency_key === parsed.idempotency_key));
|
|
60
|
+
});
|
|
61
|
+
if (existing) {
|
|
62
|
+
return existing;
|
|
63
|
+
}
|
|
64
|
+
this.signals.push(parsed);
|
|
65
|
+
return parsed;
|
|
66
|
+
}
|
|
67
|
+
async listSignals(query = {}) {
|
|
68
|
+
return this.signals.filter((signal) => matchesA2ASignalQuery(signal, query));
|
|
69
|
+
}
|
|
70
|
+
async listVisibleSignals(query) {
|
|
71
|
+
return this.signals
|
|
72
|
+
.filter((signal) => matchesA2ASignalQuery(signal, query))
|
|
73
|
+
.filter((signal) => isSignalVisibleToReader(signal, query));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
class InMemoryA2AReceiptStore {
|
|
77
|
+
receipts = new Map();
|
|
78
|
+
async markDelivered(input) {
|
|
79
|
+
return this.appendReceipt({
|
|
80
|
+
schema_version: 'A2A.V1',
|
|
81
|
+
receipt_id: input.receipt_id ?? `rcpt-${input.reader_identity}-${input.signal_id}`,
|
|
82
|
+
signal_id: input.signal_id,
|
|
83
|
+
reader_identity: input.reader_identity,
|
|
84
|
+
read_at: input.read_at ?? new Date().toISOString(),
|
|
85
|
+
delivery_state: 'delivered',
|
|
86
|
+
idempotency_key: input.idempotency_key,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async appendReceipt(receipt) {
|
|
90
|
+
const parsed = A2AReceiptV1Schema.parse(receipt);
|
|
91
|
+
const key = parsed.idempotency_key ?? parsed.receipt_id;
|
|
92
|
+
const existing = this.receipts.get(key);
|
|
93
|
+
const next = existing ? promoteReceipt(existing, parsed) : parsed;
|
|
94
|
+
this.receipts.set(key, next);
|
|
95
|
+
return next;
|
|
96
|
+
}
|
|
97
|
+
async listReceipts(query = {}) {
|
|
98
|
+
return Array.from(this.receipts.values()).filter((receipt) => matchesA2AReceiptQuery(receipt, query));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function isSignalVisibleToReader(signal, query) {
|
|
102
|
+
if (signal.recipients.length === 0 || signal.recipients.includes(query.reader_identity)) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return ((query.wu_id !== undefined && signal.wu_id === query.wu_id) ||
|
|
106
|
+
(query.initiative !== undefined && signal.initiative === query.initiative));
|
|
107
|
+
}
|
|
108
|
+
function promoteReceipt(current, next) {
|
|
109
|
+
assertSameReceiptTarget(current, next);
|
|
110
|
+
if (current.delivery_state !== 'delivered') {
|
|
111
|
+
return current;
|
|
112
|
+
}
|
|
113
|
+
return next.delivery_state === 'delivered' ? current : next;
|
|
114
|
+
}
|
|
115
|
+
function assertSameReceiptTarget(current, next) {
|
|
116
|
+
if (current.signal_id !== next.signal_id ||
|
|
117
|
+
current.reader_identity !== next.reader_identity ||
|
|
118
|
+
current.receipt_id !== next.receipt_id) {
|
|
119
|
+
throw new Error(`A2A receipt idempotency conflict for ${next.receipt_id}: signal_id, reader_identity, and receipt_id must match existing receipt.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/a2a/conformance/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { SignalEntry } from '../signal-sync-port.js';
|
|
3
|
+
import { type A2AOrigin } from './signal.js';
|
|
4
|
+
export declare const A2A_RECEIPT_ENTRY_KIND_V1: "a2a.receipt.v1";
|
|
5
|
+
export declare const A2A_RECEIPT_DELIVERY_STATES: readonly ["delivered", "acked", "rejected"];
|
|
6
|
+
/**
|
|
7
|
+
* Canonical receipt payload for A2A signal delivery.
|
|
8
|
+
*
|
|
9
|
+
* Local adapters use `delivered` when an inbox read marks visibility. ACK and
|
|
10
|
+
* rejection promotion are transport/lifecycle behaviors layered on the same
|
|
11
|
+
* receipt identity; timeout policy is intentionally owned by the bus/runtime,
|
|
12
|
+
* not by this durable payload.
|
|
13
|
+
*/
|
|
14
|
+
export declare const A2AReceiptV1Schema: z.ZodObject<{
|
|
15
|
+
schema_version: z.ZodLiteral<"A2A.V1">;
|
|
16
|
+
receipt_id: z.ZodString;
|
|
17
|
+
signal_id: z.ZodString;
|
|
18
|
+
reader_identity: z.ZodString;
|
|
19
|
+
read_at: z.ZodString;
|
|
20
|
+
delivery_state: z.ZodEnum<{
|
|
21
|
+
rejected: "rejected";
|
|
22
|
+
acked: "acked";
|
|
23
|
+
delivered: "delivered";
|
|
24
|
+
}>;
|
|
25
|
+
idempotency_key: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export type A2AReceiptV1 = z.infer<typeof A2AReceiptV1Schema>;
|
|
28
|
+
export type A2AReceiptDeliveryState = (typeof A2A_RECEIPT_DELIVERY_STATES)[number];
|
|
29
|
+
export interface A2AReceiptEntryV1 extends SignalEntry {
|
|
30
|
+
kind: typeof A2A_RECEIPT_ENTRY_KIND_V1;
|
|
31
|
+
payload: A2AReceiptV1 & Record<string, unknown>;
|
|
32
|
+
origin?: A2AOrigin;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/a2a/receipt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpE,eAAO,MAAM,yBAAyB,EAAG,gBAAyB,CAAC;AAEnE,eAAO,MAAM,2BAA2B,6CAA8C,CAAC;AAEvF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnF,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,OAAO,yBAAyB,CAAC;IACvC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { A2A_SCHEMA_VERSION_V1 } from './signal.js';
|
|
5
|
+
export const A2A_RECEIPT_ENTRY_KIND_V1 = 'a2a.receipt.v1';
|
|
6
|
+
export const A2A_RECEIPT_DELIVERY_STATES = ['delivered', 'acked', 'rejected'];
|
|
7
|
+
/**
|
|
8
|
+
* Canonical receipt payload for A2A signal delivery.
|
|
9
|
+
*
|
|
10
|
+
* Local adapters use `delivered` when an inbox read marks visibility. ACK and
|
|
11
|
+
* rejection promotion are transport/lifecycle behaviors layered on the same
|
|
12
|
+
* receipt identity; timeout policy is intentionally owned by the bus/runtime,
|
|
13
|
+
* not by this durable payload.
|
|
14
|
+
*/
|
|
15
|
+
export const A2AReceiptV1Schema = z.object({
|
|
16
|
+
schema_version: z.literal(A2A_SCHEMA_VERSION_V1),
|
|
17
|
+
receipt_id: z.string().min(1),
|
|
18
|
+
signal_id: z.string().min(1),
|
|
19
|
+
reader_identity: z.string().min(1),
|
|
20
|
+
read_at: z.string().datetime(),
|
|
21
|
+
delivery_state: z.enum(A2A_RECEIPT_DELIVERY_STATES),
|
|
22
|
+
idempotency_key: z.string().min(1).optional(),
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/a2a/receipt.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { SignalEntry } from '../signal-sync-port.js';
|
|
3
|
+
export declare const A2A_SCHEMA_VERSION_V1: "A2A.V1";
|
|
4
|
+
export declare const A2A_SIGNAL_ENTRY_KIND_V1: "a2a.signal.v1";
|
|
5
|
+
export declare const A2A_SIGNAL_INTENTS: readonly ["INFO", "PROPOSE", "COUNTER", "AGREE", "REJECT"];
|
|
6
|
+
export declare const A2A_INTERRUPT_CLASSES: readonly ["advisory", "priority", "urgent", "soon", "immediate"];
|
|
7
|
+
export declare const A2A_INTERRUPT_CLASS_DEFAULTS: {
|
|
8
|
+
readonly broadcast: "advisory";
|
|
9
|
+
readonly directed: "priority";
|
|
10
|
+
};
|
|
11
|
+
export declare const A2A_ORIGINS: readonly ["local", "remote"];
|
|
12
|
+
export declare function normalizeA2ARecipients(recipients: readonly string[]): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Canonical agent-to-agent signal payload.
|
|
15
|
+
*
|
|
16
|
+
* `workspace_id is optional for local adapters`; cloud transports must provide workspace_id as
|
|
17
|
+
* their tenant/workspace routing key. `schema_version` is mandatory on every
|
|
18
|
+
* payload so local JSONL, package exports, and hosted transports can evolve in
|
|
19
|
+
* parallel. Breaking changes require parallel A2ASignalV2 support rather than
|
|
20
|
+
* mutating this schema in place.
|
|
21
|
+
*/
|
|
22
|
+
export declare const A2ASignalV1Schema: z.ZodObject<{
|
|
23
|
+
schema_version: z.ZodLiteral<"A2A.V1">;
|
|
24
|
+
signal_id: z.ZodString;
|
|
25
|
+
workspace_id: z.ZodOptional<z.ZodString>;
|
|
26
|
+
sender_identity: z.ZodString;
|
|
27
|
+
recipients: z.ZodArray<z.ZodString>;
|
|
28
|
+
thread_id: z.ZodOptional<z.ZodString>;
|
|
29
|
+
reply_to: z.ZodOptional<z.ZodString>;
|
|
30
|
+
intent: z.ZodOptional<z.ZodEnum<{
|
|
31
|
+
INFO: "INFO";
|
|
32
|
+
PROPOSE: "PROPOSE";
|
|
33
|
+
COUNTER: "COUNTER";
|
|
34
|
+
AGREE: "AGREE";
|
|
35
|
+
REJECT: "REJECT";
|
|
36
|
+
}>>;
|
|
37
|
+
interrupt_class: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
advisory: "advisory";
|
|
39
|
+
priority: "priority";
|
|
40
|
+
urgent: "urgent";
|
|
41
|
+
soon: "soon";
|
|
42
|
+
immediate: "immediate";
|
|
43
|
+
}>>;
|
|
44
|
+
requires_ack: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
message: z.ZodString;
|
|
46
|
+
created_at: z.ZodString;
|
|
47
|
+
idempotency_key: z.ZodOptional<z.ZodString>;
|
|
48
|
+
origin: z.ZodOptional<z.ZodEnum<{
|
|
49
|
+
local: "local";
|
|
50
|
+
remote: "remote";
|
|
51
|
+
}>>;
|
|
52
|
+
wu_id: z.ZodOptional<z.ZodString>;
|
|
53
|
+
initiative: z.ZodOptional<z.ZodString>;
|
|
54
|
+
lane: z.ZodOptional<z.ZodString>;
|
|
55
|
+
role: z.ZodOptional<z.ZodString>;
|
|
56
|
+
target_role: z.ZodOptional<z.ZodString>;
|
|
57
|
+
delegation_id: z.ZodOptional<z.ZodString>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export type A2ASignalV1 = z.infer<typeof A2ASignalV1Schema>;
|
|
60
|
+
export type A2AInterruptClass = (typeof A2A_INTERRUPT_CLASSES)[number];
|
|
61
|
+
export type A2AIntent = (typeof A2A_SIGNAL_INTENTS)[number];
|
|
62
|
+
export type A2AOrigin = (typeof A2A_ORIGINS)[number];
|
|
63
|
+
export interface A2ASignalEntryV1 extends SignalEntry {
|
|
64
|
+
kind: typeof A2A_SIGNAL_ENTRY_KIND_V1;
|
|
65
|
+
payload: A2ASignalV1 & Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/a2a/signal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,qBAAqB,EAAG,QAAiB,CAAC;AACvD,eAAO,MAAM,wBAAwB,EAAG,eAAwB,CAAC;AAEjE,eAAO,MAAM,kBAAkB,4DAA6D,CAAC;AAE7F,eAAO,MAAM,qBAAqB,kEAMxB,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;CAGkC,CAAC;AAE5E,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9E;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,EAAE,OAAO,wBAAwB,CAAC;IACtC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-LumenFlow-Proprietary
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export const A2A_SCHEMA_VERSION_V1 = 'A2A.V1';
|
|
5
|
+
export const A2A_SIGNAL_ENTRY_KIND_V1 = 'a2a.signal.v1';
|
|
6
|
+
export const A2A_SIGNAL_INTENTS = ['INFO', 'PROPOSE', 'COUNTER', 'AGREE', 'REJECT'];
|
|
7
|
+
export const A2A_INTERRUPT_CLASSES = [
|
|
8
|
+
'advisory',
|
|
9
|
+
'priority',
|
|
10
|
+
'urgent',
|
|
11
|
+
'soon',
|
|
12
|
+
'immediate',
|
|
13
|
+
];
|
|
14
|
+
export const A2A_INTERRUPT_CLASS_DEFAULTS = {
|
|
15
|
+
broadcast: 'advisory',
|
|
16
|
+
directed: 'priority',
|
|
17
|
+
};
|
|
18
|
+
export const A2A_ORIGINS = ['local', 'remote'];
|
|
19
|
+
export function normalizeA2ARecipients(recipients) {
|
|
20
|
+
return Array.from(new Set(recipients.map((recipient) => recipient.trim()).filter((recipient) => recipient)));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Canonical agent-to-agent signal payload.
|
|
24
|
+
*
|
|
25
|
+
* `workspace_id is optional for local adapters`; cloud transports must provide workspace_id as
|
|
26
|
+
* their tenant/workspace routing key. `schema_version` is mandatory on every
|
|
27
|
+
* payload so local JSONL, package exports, and hosted transports can evolve in
|
|
28
|
+
* parallel. Breaking changes require parallel A2ASignalV2 support rather than
|
|
29
|
+
* mutating this schema in place.
|
|
30
|
+
*/
|
|
31
|
+
export const A2ASignalV1Schema = z.object({
|
|
32
|
+
schema_version: z.literal(A2A_SCHEMA_VERSION_V1),
|
|
33
|
+
signal_id: z.string().min(1),
|
|
34
|
+
workspace_id: z.string().min(1).optional(),
|
|
35
|
+
sender_identity: z.string().min(1),
|
|
36
|
+
recipients: z.array(z.string().min(1)),
|
|
37
|
+
thread_id: z.string().min(1).optional(),
|
|
38
|
+
reply_to: z.string().min(1).optional(),
|
|
39
|
+
intent: z.enum(A2A_SIGNAL_INTENTS).optional(),
|
|
40
|
+
interrupt_class: z.enum(A2A_INTERRUPT_CLASSES).optional(),
|
|
41
|
+
requires_ack: z.boolean().optional(),
|
|
42
|
+
message: z.string().min(1),
|
|
43
|
+
created_at: z.string().datetime(),
|
|
44
|
+
idempotency_key: z.string().min(1).optional(),
|
|
45
|
+
origin: z.enum(A2A_ORIGINS).optional(),
|
|
46
|
+
wu_id: z.string().min(1).optional(),
|
|
47
|
+
initiative: z.string().min(1).optional(),
|
|
48
|
+
lane: z.string().min(1).optional(),
|
|
49
|
+
role: z.string().min(1).optional(),
|
|
50
|
+
target_role: z.string().min(1).optional(),
|
|
51
|
+
delegation_id: z.string().min(1).optional(),
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/a2a/signal.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from './wu-events.js';
|
|
|
9
9
|
export * from './replay-artifact.js';
|
|
10
10
|
export * from './pack-outcome-descriptor.js';
|
|
11
11
|
export * from './scope-grammar.js';
|
|
12
|
+
export * from './a2a/index.js';
|
|
12
13
|
export * from './http/http-control-plane-sync-port.js';
|
|
13
14
|
export * from './mock/mock-control-plane-sync-port.js';
|
|
14
15
|
export * from './mock/mock-signal-sync-port.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export * from './wu-events.js';
|
|
|
11
11
|
export * from './replay-artifact.js';
|
|
12
12
|
export * from './pack-outcome-descriptor.js';
|
|
13
13
|
export * from './scope-grammar.js';
|
|
14
|
+
export * from './a2a/index.js';
|
|
14
15
|
export * from './http/http-control-plane-sync-port.js';
|
|
15
16
|
export * from './mock/mock-control-plane-sync-port.js';
|
|
16
17
|
export * from './mock/mock-signal-sync-port.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,4DAA4D;AAE5D,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumenflow/control-plane-sdk",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "Control plane sync contracts and adapters for LumenFlow runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -16,6 +16,16 @@
|
|
|
16
16
|
"import": "./dist/scope-grammar.js",
|
|
17
17
|
"default": "./dist/scope-grammar.js"
|
|
18
18
|
},
|
|
19
|
+
"./a2a": {
|
|
20
|
+
"types": "./dist/a2a/index.d.ts",
|
|
21
|
+
"import": "./dist/a2a/index.js",
|
|
22
|
+
"default": "./dist/a2a/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./a2a/conformance": {
|
|
25
|
+
"types": "./dist/a2a/conformance/index.d.ts",
|
|
26
|
+
"import": "./dist/a2a/conformance/index.js",
|
|
27
|
+
"default": "./dist/a2a/conformance/index.js"
|
|
28
|
+
},
|
|
19
29
|
"./package.json": "./package.json"
|
|
20
30
|
},
|
|
21
31
|
"files": [
|