@agentplat/mesh 0.3.0-alpha.1 → 0.3.0-alpha.2

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 (102) hide show
  1. package/README.md +247 -2
  2. package/dist/coordination-allocation-contracts.d.ts +598 -0
  3. package/dist/coordination-allocation-contracts.d.ts.map +1 -0
  4. package/dist/coordination-allocation-contracts.js +2 -0
  5. package/dist/coordination-allocation-contracts.js.map +1 -0
  6. package/dist/coordination-allocation-state.d.ts +19 -0
  7. package/dist/coordination-allocation-state.d.ts.map +1 -0
  8. package/dist/coordination-allocation-state.js +5496 -0
  9. package/dist/coordination-allocation-state.js.map +1 -0
  10. package/dist/coordination-allocation.d.ts +10 -0
  11. package/dist/coordination-allocation.d.ts.map +1 -0
  12. package/dist/coordination-allocation.js +2743 -0
  13. package/dist/coordination-allocation.js.map +1 -0
  14. package/dist/coordination-contracts.d.ts +78 -0
  15. package/dist/coordination-contracts.d.ts.map +1 -0
  16. package/dist/coordination-contracts.js +2 -0
  17. package/dist/coordination-contracts.js.map +1 -0
  18. package/dist/coordination-discovery-contracts.d.ts +150 -0
  19. package/dist/coordination-discovery-contracts.d.ts.map +1 -0
  20. package/dist/coordination-discovery-contracts.js +2 -0
  21. package/dist/coordination-discovery-contracts.js.map +1 -0
  22. package/dist/coordination-discovery-state.d.ts +12 -0
  23. package/dist/coordination-discovery-state.d.ts.map +1 -0
  24. package/dist/coordination-discovery-state.js +542 -0
  25. package/dist/coordination-discovery-state.js.map +1 -0
  26. package/dist/coordination-discovery.d.ts +19 -0
  27. package/dist/coordination-discovery.d.ts.map +1 -0
  28. package/dist/coordination-discovery.js +850 -0
  29. package/dist/coordination-discovery.js.map +1 -0
  30. package/dist/coordination-execution.d.ts +6 -0
  31. package/dist/coordination-execution.d.ts.map +1 -0
  32. package/dist/coordination-execution.js +854 -0
  33. package/dist/coordination-execution.js.map +1 -0
  34. package/dist/coordination-inbound-contracts.d.ts +150 -0
  35. package/dist/coordination-inbound-contracts.d.ts.map +1 -0
  36. package/dist/coordination-inbound-contracts.js +2 -0
  37. package/dist/coordination-inbound-contracts.js.map +1 -0
  38. package/dist/coordination-inbound-state.d.ts +26 -0
  39. package/dist/coordination-inbound-state.d.ts.map +1 -0
  40. package/dist/coordination-inbound-state.js +331 -0
  41. package/dist/coordination-inbound-state.js.map +1 -0
  42. package/dist/coordination-inbound.d.ts +16 -0
  43. package/dist/coordination-inbound.d.ts.map +1 -0
  44. package/dist/coordination-inbound.js +944 -0
  45. package/dist/coordination-inbound.js.map +1 -0
  46. package/dist/coordination-lease-renewal.d.ts +8 -0
  47. package/dist/coordination-lease-renewal.d.ts.map +1 -0
  48. package/dist/coordination-lease-renewal.js +518 -0
  49. package/dist/coordination-lease-renewal.js.map +1 -0
  50. package/dist/coordination-objective-topic-contracts.d.ts +70 -0
  51. package/dist/coordination-objective-topic-contracts.d.ts.map +1 -0
  52. package/dist/coordination-objective-topic-contracts.js +2 -0
  53. package/dist/coordination-objective-topic-contracts.js.map +1 -0
  54. package/dist/coordination-objective-topic.d.ts +6 -0
  55. package/dist/coordination-objective-topic.d.ts.map +1 -0
  56. package/dist/coordination-objective-topic.js +561 -0
  57. package/dist/coordination-objective-topic.js.map +1 -0
  58. package/dist/coordination-objective-work-contracts.d.ts +212 -0
  59. package/dist/coordination-objective-work-contracts.d.ts.map +1 -0
  60. package/dist/coordination-objective-work-contracts.js +2 -0
  61. package/dist/coordination-objective-work-contracts.js.map +1 -0
  62. package/dist/coordination-objective-work-state.d.ts +10 -0
  63. package/dist/coordination-objective-work-state.d.ts.map +1 -0
  64. package/dist/coordination-objective-work-state.js +1075 -0
  65. package/dist/coordination-objective-work-state.js.map +1 -0
  66. package/dist/coordination-objective-work-time.d.ts +9 -0
  67. package/dist/coordination-objective-work-time.d.ts.map +1 -0
  68. package/dist/coordination-objective-work-time.js +48 -0
  69. package/dist/coordination-objective-work-time.js.map +1 -0
  70. package/dist/coordination-objective-work.d.ts +11 -0
  71. package/dist/coordination-objective-work.d.ts.map +1 -0
  72. package/dist/coordination-objective-work.js +1090 -0
  73. package/dist/coordination-objective-work.js.map +1 -0
  74. package/dist/coordination-recovery.d.ts +13 -0
  75. package/dist/coordination-recovery.d.ts.map +1 -0
  76. package/dist/coordination-recovery.js +951 -0
  77. package/dist/coordination-recovery.js.map +1 -0
  78. package/dist/coordination-reducer.d.ts +8 -0
  79. package/dist/coordination-reducer.d.ts.map +1 -0
  80. package/dist/coordination-reducer.js +81 -0
  81. package/dist/coordination-reducer.js.map +1 -0
  82. package/dist/coordination-state.d.ts +13 -0
  83. package/dist/coordination-state.d.ts.map +1 -0
  84. package/dist/coordination-state.js +335 -0
  85. package/dist/coordination-state.js.map +1 -0
  86. package/dist/coordination-topic-contracts.d.ts +82 -0
  87. package/dist/coordination-topic-contracts.d.ts.map +1 -0
  88. package/dist/coordination-topic-contracts.js +2 -0
  89. package/dist/coordination-topic-contracts.js.map +1 -0
  90. package/dist/coordination-topic.d.ts +6 -0
  91. package/dist/coordination-topic.d.ts.map +1 -0
  92. package/dist/coordination-topic.js +561 -0
  93. package/dist/coordination-topic.js.map +1 -0
  94. package/dist/coordination.d.ts +21 -0
  95. package/dist/coordination.d.ts.map +1 -0
  96. package/dist/coordination.js +21 -0
  97. package/dist/coordination.js.map +1 -0
  98. package/dist/sha256.d.ts +3 -0
  99. package/dist/sha256.d.ts.map +1 -0
  100. package/dist/sha256.js +117 -0
  101. package/dist/sha256.js.map +1 -0
  102. package/package.json +7 -3
@@ -0,0 +1,542 @@
1
+ import { compareMeshTimestamps, } from '@agentplat/mesh-protocol';
2
+ import { assertFrozenMeshCoordinationState } from './coordination-state.js';
3
+ import { assertMeshLogicalTime, assertMeshMessageId, createFrozenRecord, } from './state.js';
4
+ const identifierPattern = /^[A-Za-z0-9][A-Za-z0-9._:@-]*$/;
5
+ const utf8Encoder = new TextEncoder();
6
+ const allowedSubscriptions = new Set([
7
+ 'membership',
8
+ 'capability',
9
+ 'objective',
10
+ ]);
11
+ export const DEFAULT_MESH_DISCOVERY_LIMITS = Object.freeze({
12
+ maximumAdmissions: 256,
13
+ maximumInstancesPerAdmission: 16,
14
+ maximumPeerCards: 256,
15
+ maximumPeerViews: 128,
16
+ maximumPeerCardBytes: 65_536,
17
+ maximumCapabilities: 2_048,
18
+ maximumCapabilitiesPerPeer: 64,
19
+ maximumCapabilityBytes: 65_536,
20
+ maximumSubscriptions: 3,
21
+ maximumFanout: 32,
22
+ maximumRequirementCapabilityKeys: 64,
23
+ maximumRequirementAttributes: 128,
24
+ maximumRequirementBytes: 65_536,
25
+ });
26
+ /** Creates one empty discovery projection with explicit local admission. */
27
+ export function createMeshDiscoveryState(options) {
28
+ if (!options || typeof options !== 'object') {
29
+ throw new TypeError('Mesh discovery state options are required');
30
+ }
31
+ assertExactKeys(options, ['admittedPeers', 'identity', 'limits', 'subscriptions'], ['identity']);
32
+ const limits = resolveLimits(options.limits, false);
33
+ const admittedPeers = options.admittedPeers ?? [];
34
+ const subscriptions = options.subscriptions ?? [];
35
+ if (!Array.isArray(admittedPeers) || !Array.isArray(subscriptions)) {
36
+ throw new TypeError('Mesh discovery collections must be arrays');
37
+ }
38
+ if (admittedPeers.length > limits.maximumAdmissions) {
39
+ throw new RangeError('Mesh discovery admission limit exceeded');
40
+ }
41
+ const admissions = admittedPeers.map((admission) => {
42
+ const frozen = freezeAdmission(admission, limits);
43
+ return [frozen.peerId, frozen];
44
+ });
45
+ const frozenSubscriptions = freezeSubscriptions(subscriptions, limits);
46
+ return Object.freeze({
47
+ schemaVersion: 1,
48
+ identity: freezeIdentity(options.identity),
49
+ admittedPeers: createFrozenRecord(admissions, 'Duplicate Mesh discovery admission'),
50
+ peerCards: createFrozenRecord([]),
51
+ peerViews: createFrozenRecord([]),
52
+ capabilities: createFrozenRecord([]),
53
+ subscriptions: frozenSubscriptions,
54
+ limits,
55
+ lastLogicalTime: 0,
56
+ });
57
+ }
58
+ /** Strictly restores a decoded discovery snapshot. */
59
+ export function restoreMeshDiscoveryState(snapshot) {
60
+ const parsed = validateSnapshot(snapshot);
61
+ return Object.freeze({
62
+ schemaVersion: 1,
63
+ identity: freezeIdentity(parsed.identity),
64
+ admittedPeers: createFrozenRecord(parsed.admittedPeers.map(([key, value]) => [
65
+ key,
66
+ freezeAdmission(value, parsed.limits),
67
+ ])),
68
+ peerCards: createFrozenRecord(parsed.peerCards.map(([key, value]) => [key, freezePeerCard(value)])),
69
+ peerViews: createFrozenRecord(parsed.peerViews.map(([key, value]) => [key, Object.freeze({ ...value })])),
70
+ capabilities: createFrozenRecord(parsed.capabilities.map(([key, value]) => [key, freezeCapability(value)])),
71
+ subscriptions: Object.freeze([...parsed.subscriptions]),
72
+ limits: Object.freeze({ ...parsed.limits }),
73
+ lastLogicalTime: parsed.lastLogicalTime,
74
+ });
75
+ }
76
+ /** Composes separately versioned core and discovery snapshots. */
77
+ export function createMeshDiscoveryRuntimeState(coordination, discovery) {
78
+ assertFrozenMeshCoordinationState(coordination);
79
+ assertFrozenMeshDiscoveryState(discovery);
80
+ if (coordination.identity.tenantId !== discovery.identity.tenantId ||
81
+ coordination.identity.meshId !== discovery.identity.meshId ||
82
+ coordination.identity.peerId !== discovery.identity.peerId ||
83
+ coordination.identity.instanceId !== discovery.identity.instanceId ||
84
+ coordination.identity.keyId !== discovery.identity.keyId ||
85
+ coordination.lastLogicalTime !== discovery.lastLogicalTime) {
86
+ throw new TypeError('Mesh discovery runtime snapshots are not aligned');
87
+ }
88
+ assertProjectionDomainBindings(coordination, discovery);
89
+ return Object.freeze({ coordination, discovery });
90
+ }
91
+ /** Package-internal strict assertion shared by pure discovery functions. */
92
+ export function assertFrozenMeshDiscoveryState(state) {
93
+ if (!state ||
94
+ typeof state !== 'object' ||
95
+ !Object.isFrozen(state) ||
96
+ !Object.isFrozen(state.identity) ||
97
+ !Object.isFrozen(state.admittedPeers) ||
98
+ !Object.isFrozen(state.peerCards) ||
99
+ !Object.isFrozen(state.peerViews) ||
100
+ !Object.isFrozen(state.capabilities) ||
101
+ !Object.isFrozen(state.subscriptions) ||
102
+ !Object.isFrozen(state.limits) ||
103
+ Object.getPrototypeOf(state.admittedPeers) !== null ||
104
+ Object.getPrototypeOf(state.peerCards) !== null ||
105
+ Object.getPrototypeOf(state.peerViews) !== null ||
106
+ Object.getPrototypeOf(state.capabilities) !== null ||
107
+ Object.values(state.admittedPeers).some((entry) => !Object.isFrozen(entry) || !Object.isFrozen(entry.instanceIds)) ||
108
+ Object.values(state.peerCards).some((entry) => !Object.isFrozen(entry) ||
109
+ !Object.isFrozen(entry.protocolVersions) ||
110
+ !Object.isFrozen(entry.transportHints) ||
111
+ !Object.isFrozen(entry.capabilityIds)) ||
112
+ Object.values(state.peerViews).some((entry) => !Object.isFrozen(entry)) ||
113
+ Object.values(state.capabilities).some((entry) => !Object.isFrozen(entry) ||
114
+ !Object.isFrozen(entry.inputMediaTypes) ||
115
+ !Object.isFrozen(entry.outputMediaTypes) ||
116
+ !Object.isFrozen(entry.attributes) ||
117
+ Object.getPrototypeOf(entry.attributes) !== null)) {
118
+ throw new TypeError('Mesh discovery state must be an immutable snapshot');
119
+ }
120
+ validateSnapshot(state);
121
+ }
122
+ function validateSnapshot(snapshot) {
123
+ if (!snapshot || typeof snapshot !== 'object') {
124
+ throw new TypeError('Mesh discovery snapshot is required');
125
+ }
126
+ const candidate = snapshot;
127
+ assertExactKeys(candidate, [
128
+ 'admittedPeers',
129
+ 'capabilities',
130
+ 'identity',
131
+ 'lastLogicalTime',
132
+ 'limits',
133
+ 'peerCards',
134
+ 'peerViews',
135
+ 'schemaVersion',
136
+ 'subscriptions',
137
+ ], [
138
+ 'admittedPeers',
139
+ 'capabilities',
140
+ 'identity',
141
+ 'lastLogicalTime',
142
+ 'limits',
143
+ 'peerCards',
144
+ 'peerViews',
145
+ 'schemaVersion',
146
+ 'subscriptions',
147
+ ]);
148
+ if (candidate.schemaVersion !== 1) {
149
+ throw new TypeError('Mesh discovery schema version is unsupported');
150
+ }
151
+ freezeIdentity(candidate.identity);
152
+ const limits = resolveLimits(candidate.limits, true);
153
+ assertMeshLogicalTime(candidate.lastLogicalTime);
154
+ assertRecordObject(candidate.admittedPeers, 'admittedPeers');
155
+ assertRecordObject(candidate.peerCards, 'peerCards');
156
+ assertRecordObject(candidate.peerViews, 'peerViews');
157
+ assertRecordObject(candidate.capabilities, 'capabilities');
158
+ if (!Array.isArray(candidate.subscriptions)) {
159
+ throw new TypeError('Mesh discovery subscriptions must be an array');
160
+ }
161
+ freezeSubscriptions(candidate.subscriptions, limits);
162
+ const admittedPeers = Object.entries(candidate.admittedPeers);
163
+ const peerCards = Object.entries(candidate.peerCards);
164
+ const peerViews = Object.entries(candidate.peerViews);
165
+ const capabilities = Object.entries(candidate.capabilities);
166
+ if (admittedPeers.length > limits.maximumAdmissions ||
167
+ peerCards.length > limits.maximumPeerCards ||
168
+ peerViews.length > limits.maximumPeerViews ||
169
+ capabilities.length > limits.maximumCapabilities) {
170
+ throw new RangeError('Mesh discovery snapshot exceeds its limits');
171
+ }
172
+ for (const [peerId, admission] of admittedPeers) {
173
+ if (freezeAdmission(admission, limits).peerId !== peerId) {
174
+ throw new TypeError('Mesh discovery admission key is invalid');
175
+ }
176
+ }
177
+ for (const [peerId, card] of peerCards) {
178
+ validatePeerCard(card, candidate.lastLogicalTime, limits);
179
+ const admission = candidate.admittedPeers[peerId];
180
+ if (card.peerId !== peerId ||
181
+ !Object.hasOwn(candidate.admittedPeers, peerId) ||
182
+ !admission.instanceIds.includes(card.instanceId) ||
183
+ compare(card.validUntil, admission.validUntil) > 0) {
184
+ throw new TypeError('Mesh discovery Peer Card binding is invalid');
185
+ }
186
+ }
187
+ for (const [peerId, view] of peerViews) {
188
+ assertExactKeys(view, ['cardRevision', 'expiresAt', 'observedAt', 'peerCardId', 'peerId'], ['cardRevision', 'expiresAt', 'observedAt', 'peerCardId', 'peerId']);
189
+ const card = candidate.peerCards[peerId];
190
+ if (view.peerId !== peerId ||
191
+ !card ||
192
+ card.status !== 'active' ||
193
+ view.peerCardId !== card.peerCardId ||
194
+ view.cardRevision !== card.cardRevision ||
195
+ view.expiresAt !== card.expiresAt ||
196
+ !isLogicalTimeAtMost(view.observedAt, candidate.lastLogicalTime) ||
197
+ !isLogicalTimeAtLeast(view.expiresAt, view.observedAt)) {
198
+ throw new TypeError('Mesh discovery Peer View is invalid');
199
+ }
200
+ }
201
+ const capabilityCounts = new Map();
202
+ for (const [capabilityKey, capability] of capabilities) {
203
+ validateCapability(capability, candidate.lastLogicalTime, limits);
204
+ const expectedKey = JSON.stringify([
205
+ capability.ownerPeerId,
206
+ capability.capabilityId,
207
+ ]);
208
+ const card = candidate.peerCards[capability.ownerPeerId];
209
+ if (capabilityKey !== expectedKey ||
210
+ !card ||
211
+ (capability.status === 'active' &&
212
+ (capability.instanceId !== card.instanceId ||
213
+ !card.capabilityIds.includes(capability.capabilityId) ||
214
+ compare(capability.validUntil, card.validUntil) > 0))) {
215
+ throw new TypeError('Mesh discovery capability binding is invalid');
216
+ }
217
+ const nextCount = (capabilityCounts.get(capability.ownerPeerId) ?? 0) + 1;
218
+ capabilityCounts.set(capability.ownerPeerId, nextCount);
219
+ if (nextCount > limits.maximumCapabilitiesPerPeer) {
220
+ throw new RangeError('Mesh discovery per-peer capability limit exceeded');
221
+ }
222
+ }
223
+ return {
224
+ identity: candidate.identity,
225
+ admittedPeers,
226
+ peerCards,
227
+ peerViews,
228
+ capabilities,
229
+ subscriptions: candidate.subscriptions,
230
+ limits,
231
+ lastLogicalTime: candidate.lastLogicalTime,
232
+ };
233
+ }
234
+ function validatePeerCard(card, lastLogicalTime, limits) {
235
+ assertExactKeys(card, [
236
+ 'acceptedAt',
237
+ 'acceptedMessageId',
238
+ 'capabilityIds',
239
+ 'cardRevision',
240
+ 'expiresAt',
241
+ 'instanceId',
242
+ 'peerCardId',
243
+ 'peerId',
244
+ 'protocolVersions',
245
+ 'status',
246
+ 'transportHints',
247
+ 'validFrom',
248
+ 'validUntil',
249
+ 'validityVerifiedAt',
250
+ ], [
251
+ 'acceptedAt',
252
+ 'acceptedMessageId',
253
+ 'capabilityIds',
254
+ 'cardRevision',
255
+ 'expiresAt',
256
+ 'instanceId',
257
+ 'peerCardId',
258
+ 'peerId',
259
+ 'protocolVersions',
260
+ 'status',
261
+ 'transportHints',
262
+ 'validFrom',
263
+ 'validUntil',
264
+ 'validityVerifiedAt',
265
+ ]);
266
+ assertIdentifier(card.peerId, 'Peer Card peerId');
267
+ assertIdentifier(card.instanceId, 'Peer Card instanceId');
268
+ assertIdentifier(card.peerCardId, 'Peer Card ID');
269
+ assertMeshMessageId(card.acceptedMessageId);
270
+ assertStringArray(card.transportHints, 'Peer Card transportHints');
271
+ assertStringArray(card.capabilityIds, 'Peer Card capabilityIds');
272
+ if (!Array.isArray(card.protocolVersions) ||
273
+ card.protocolVersions.some((version) => !Number.isSafeInteger(version) || version < 0) ||
274
+ !Number.isSafeInteger(card.cardRevision) ||
275
+ card.cardRevision < 1 ||
276
+ !['active', 'departed', 'expired'].includes(card.status) ||
277
+ compare(card.validFrom, card.validUntil) >= 0 ||
278
+ compare(card.validityVerifiedAt, card.validFrom) < 0 ||
279
+ compare(card.validityVerifiedAt, card.validUntil) >= 0 ||
280
+ !isLogicalTimeAtMost(card.acceptedAt, lastLogicalTime) ||
281
+ !isLogicalTimeAtLeast(card.expiresAt, card.acceptedAt) ||
282
+ (card.status !== 'departed' &&
283
+ card.expiresAt !==
284
+ expectedLogicalExpiry(card.validUntil, card.validityVerifiedAt, card.acceptedAt)) ||
285
+ encodedBytes(card) > limits.maximumPeerCardBytes) {
286
+ throw new TypeError('Mesh discovery Peer Card is invalid');
287
+ }
288
+ }
289
+ function validateCapability(capability, lastLogicalTime, limits) {
290
+ assertExactKeys(capability, [
291
+ 'acceptedAt',
292
+ 'acceptedMessageId',
293
+ 'advertisementId',
294
+ 'attributes',
295
+ 'capabilityId',
296
+ 'capabilityKey',
297
+ 'capabilityRevision',
298
+ 'expiresAt',
299
+ 'inputMediaTypes',
300
+ 'instanceId',
301
+ 'maximumConcurrency',
302
+ 'maximumPayloadBytes',
303
+ 'outputMediaTypes',
304
+ 'ownerPeerId',
305
+ 'status',
306
+ 'validFrom',
307
+ 'validUntil',
308
+ 'validityVerifiedAt',
309
+ 'variant',
310
+ 'version',
311
+ ], [
312
+ 'acceptedAt',
313
+ 'acceptedMessageId',
314
+ 'advertisementId',
315
+ 'attributes',
316
+ 'capabilityId',
317
+ 'capabilityKey',
318
+ 'capabilityRevision',
319
+ 'expiresAt',
320
+ 'inputMediaTypes',
321
+ 'instanceId',
322
+ 'outputMediaTypes',
323
+ 'ownerPeerId',
324
+ 'status',
325
+ 'validFrom',
326
+ 'validUntil',
327
+ 'validityVerifiedAt',
328
+ 'version',
329
+ ]);
330
+ assertIdentifier(capability.ownerPeerId, 'capability ownerPeerId');
331
+ assertIdentifier(capability.instanceId, 'capability instanceId');
332
+ assertIdentifier(capability.advertisementId, 'advertisementId');
333
+ assertIdentifier(capability.capabilityId, 'capabilityId');
334
+ assertMeshMessageId(capability.acceptedMessageId);
335
+ assertStringArray(capability.inputMediaTypes, 'inputMediaTypes');
336
+ assertStringArray(capability.outputMediaTypes, 'outputMediaTypes');
337
+ assertStringRecord(capability.attributes, 'capability attributes');
338
+ if (typeof capability.capabilityKey !== 'string' ||
339
+ capability.capabilityKey.length < 1 ||
340
+ typeof capability.version !== 'string' ||
341
+ capability.version.length < 1 ||
342
+ (capability.variant !== undefined &&
343
+ (typeof capability.variant !== 'string' ||
344
+ capability.variant.length < 1)) ||
345
+ !Number.isSafeInteger(capability.capabilityRevision) ||
346
+ capability.capabilityRevision < 1 ||
347
+ !['active', 'withdrawn', 'departed', 'expired'].includes(capability.status) ||
348
+ compare(capability.validFrom, capability.validUntil) >= 0 ||
349
+ compare(capability.validityVerifiedAt, capability.validFrom) < 0 ||
350
+ compare(capability.validityVerifiedAt, capability.validUntil) >= 0 ||
351
+ !isLogicalTimeAtMost(capability.acceptedAt, lastLogicalTime) ||
352
+ !isLogicalTimeAtLeast(capability.expiresAt, capability.acceptedAt) ||
353
+ (capability.status !== 'withdrawn' &&
354
+ capability.expiresAt !==
355
+ expectedLogicalExpiry(capability.validUntil, capability.validityVerifiedAt, capability.acceptedAt)) ||
356
+ (capability.maximumConcurrency !== undefined &&
357
+ (!Number.isSafeInteger(capability.maximumConcurrency) ||
358
+ capability.maximumConcurrency < 1)) ||
359
+ (capability.maximumPayloadBytes !== undefined &&
360
+ (!Number.isSafeInteger(capability.maximumPayloadBytes) ||
361
+ capability.maximumPayloadBytes < 1)) ||
362
+ encodedBytes(capability) > limits.maximumCapabilityBytes) {
363
+ throw new TypeError('Mesh discovery capability is invalid');
364
+ }
365
+ }
366
+ function freezeAdmission(admission, limits) {
367
+ if (!admission || typeof admission !== 'object') {
368
+ throw new TypeError('Mesh discovery admission is required');
369
+ }
370
+ assertExactKeys(admission, ['instanceIds', 'peerId', 'validUntil'], ['instanceIds', 'peerId', 'validUntil']);
371
+ assertIdentifier(admission.peerId, 'admission peerId');
372
+ if (!Array.isArray(admission.instanceIds) ||
373
+ admission.instanceIds.length < 1 ||
374
+ admission.instanceIds.length > limits.maximumInstancesPerAdmission) {
375
+ throw new RangeError('Invalid Mesh discovery admitted instance bound');
376
+ }
377
+ const instanceIds = [...admission.instanceIds];
378
+ for (const instanceId of instanceIds) {
379
+ assertIdentifier(instanceId, 'admission instanceId');
380
+ }
381
+ if (new Set(instanceIds).size !== instanceIds.length) {
382
+ throw new TypeError('Duplicate Mesh discovery admitted instanceId');
383
+ }
384
+ compare(admission.validUntil, admission.validUntil);
385
+ return Object.freeze({
386
+ peerId: admission.peerId,
387
+ instanceIds: Object.freeze(instanceIds),
388
+ validUntil: admission.validUntil,
389
+ });
390
+ }
391
+ function freezePeerCard(card) {
392
+ return Object.freeze({
393
+ ...card,
394
+ protocolVersions: Object.freeze([...card.protocolVersions]),
395
+ transportHints: Object.freeze([...card.transportHints]),
396
+ capabilityIds: Object.freeze([...card.capabilityIds]),
397
+ });
398
+ }
399
+ function freezeCapability(capability) {
400
+ return Object.freeze({
401
+ ...capability,
402
+ inputMediaTypes: Object.freeze([...capability.inputMediaTypes]),
403
+ outputMediaTypes: Object.freeze([...capability.outputMediaTypes]),
404
+ attributes: freezeStringRecord(capability.attributes),
405
+ });
406
+ }
407
+ function resolveLimits(overrides, requireComplete) {
408
+ const names = Object.keys(DEFAULT_MESH_DISCOVERY_LIMITS).sort();
409
+ if (overrides !== undefined) {
410
+ assertExactKeys(overrides, names, requireComplete ? names : []);
411
+ }
412
+ else if (requireComplete) {
413
+ throw new TypeError('Mesh discovery limits are required');
414
+ }
415
+ const limits = { ...DEFAULT_MESH_DISCOVERY_LIMITS, ...overrides };
416
+ for (const [name, value] of Object.entries(limits)) {
417
+ const maximum = DEFAULT_MESH_DISCOVERY_LIMITS[name];
418
+ if (!Number.isSafeInteger(value) || value < 1 || value > maximum) {
419
+ throw new RangeError(`Mesh discovery limit ${name} must be between 1 and ${maximum}`);
420
+ }
421
+ }
422
+ if (limits.maximumPeerCards > limits.maximumAdmissions ||
423
+ limits.maximumPeerViews > limits.maximumPeerCards ||
424
+ limits.maximumCapabilitiesPerPeer > limits.maximumCapabilities) {
425
+ throw new RangeError('Mesh discovery limits are internally inconsistent');
426
+ }
427
+ return Object.freeze(limits);
428
+ }
429
+ function assertProjectionDomainBindings(coordination, discovery) {
430
+ for (const card of Object.values(discovery.peerCards)) {
431
+ const recordType = card.status === 'departed' ? 'peer.goodbye' : 'peer.card';
432
+ const record = coordination.domainRecords[JSON.stringify([recordType, card.peerCardId])];
433
+ if (!record ||
434
+ record.recordType !== recordType ||
435
+ record.messageId !== card.acceptedMessageId ||
436
+ record.acceptedAt !== card.acceptedAt) {
437
+ throw new TypeError('Mesh discovery Peer Card domain record binding is invalid');
438
+ }
439
+ }
440
+ for (const capability of Object.values(discovery.capabilities)) {
441
+ const recordType = capability.status === 'withdrawn'
442
+ ? 'capability.withdraw'
443
+ : 'capability.advertise';
444
+ const record = coordination.domainRecords[JSON.stringify([recordType, capability.advertisementId])];
445
+ if (!record ||
446
+ record.recordType !== recordType ||
447
+ record.messageId !== capability.acceptedMessageId ||
448
+ record.acceptedAt !== capability.acceptedAt) {
449
+ throw new TypeError('Mesh discovery capability domain record binding is invalid');
450
+ }
451
+ }
452
+ }
453
+ function expectedLogicalExpiry(validUntil, verifiedAt, acceptedAt) {
454
+ const validUntilMs = Date.parse(validUntil);
455
+ const verifiedAtMs = Date.parse(verifiedAt);
456
+ if (!Number.isFinite(validUntilMs) || !Number.isFinite(verifiedAtMs)) {
457
+ throw new TypeError('Invalid Mesh discovery validity timestamp');
458
+ }
459
+ const remaining = Math.max(0, validUntilMs - verifiedAtMs);
460
+ if (acceptedAt > Number.MAX_SAFE_INTEGER - remaining) {
461
+ throw new RangeError('Mesh discovery expiry exceeds logical time');
462
+ }
463
+ return acceptedAt + remaining;
464
+ }
465
+ function freezeSubscriptions(subscriptions, limits) {
466
+ if (subscriptions.length > limits.maximumSubscriptions ||
467
+ subscriptions.some((topic) => !allowedSubscriptions.has(topic)) ||
468
+ new Set(subscriptions).size !== subscriptions.length) {
469
+ throw new TypeError('Invalid Mesh discovery subscriptions');
470
+ }
471
+ return Object.freeze([...subscriptions].sort());
472
+ }
473
+ function freezeIdentity(identity) {
474
+ if (!identity || typeof identity !== 'object') {
475
+ throw new TypeError('Mesh discovery identity is required');
476
+ }
477
+ assertExactKeys(identity, ['instanceId', 'keyId', 'meshId', 'peerId', 'tenantId'], ['instanceId', 'keyId', 'meshId', 'peerId', 'tenantId']);
478
+ assertIdentifier(identity.tenantId, 'tenantId');
479
+ assertIdentifier(identity.meshId, 'meshId');
480
+ assertIdentifier(identity.peerId, 'peerId');
481
+ assertIdentifier(identity.instanceId, 'instanceId');
482
+ assertIdentifier(identity.keyId, 'keyId');
483
+ return Object.freeze({ ...identity });
484
+ }
485
+ function assertIdentifier(value, name) {
486
+ if (typeof value !== 'string' ||
487
+ !identifierPattern.test(value) ||
488
+ utf8Encoder.encode(value).byteLength > 256) {
489
+ throw new TypeError(`Invalid Mesh discovery ${name}`);
490
+ }
491
+ }
492
+ function assertStringArray(value, name) {
493
+ if (!Array.isArray(value) ||
494
+ value.some((entry) => typeof entry !== 'string')) {
495
+ throw new TypeError(`Invalid Mesh discovery ${name}`);
496
+ }
497
+ }
498
+ function assertStringRecord(value, name) {
499
+ assertRecordObject(value, name);
500
+ if (Object.values(value).some((entry) => typeof entry !== 'string')) {
501
+ throw new TypeError(`Invalid Mesh discovery ${name}`);
502
+ }
503
+ }
504
+ function freezeStringRecord(value) {
505
+ return createFrozenRecord(Object.entries(value));
506
+ }
507
+ function assertRecordObject(value, name) {
508
+ const prototype = value && typeof value === 'object' ? Object.getPrototypeOf(value) : null;
509
+ if (!value ||
510
+ typeof value !== 'object' ||
511
+ Array.isArray(value) ||
512
+ (prototype !== null && prototype !== Object.prototype) ||
513
+ Object.getOwnPropertySymbols(value).length > 0 ||
514
+ Object.getOwnPropertyNames(value).some((key) => !Object.prototype.propertyIsEnumerable.call(value, key))) {
515
+ throw new TypeError(`Mesh discovery ${name} must be a record`);
516
+ }
517
+ }
518
+ function assertExactKeys(value, supportedKeys, requiredKeys) {
519
+ const actualKeys = Object.getOwnPropertyNames(value);
520
+ const supported = new Set(supportedKeys);
521
+ if (actualKeys.some((key) => !supported.has(key)) ||
522
+ requiredKeys.some((key) => !Object.hasOwn(value, key)) ||
523
+ Object.getOwnPropertySymbols(value).length > 0) {
524
+ throw new TypeError('Mesh discovery value contains unsupported fields');
525
+ }
526
+ }
527
+ function compare(left, right) {
528
+ const result = compareMeshTimestamps(left, right);
529
+ if (!result.ok)
530
+ throw new TypeError('Invalid Mesh discovery timestamp');
531
+ return result.value;
532
+ }
533
+ function isLogicalTimeAtMost(value, maximum) {
534
+ return Number.isSafeInteger(value) && value >= 0 && value <= maximum;
535
+ }
536
+ function isLogicalTimeAtLeast(value, minimum) {
537
+ return Number.isSafeInteger(value) && value >= minimum;
538
+ }
539
+ function encodedBytes(value) {
540
+ return utf8Encoder.encode(JSON.stringify(value)).byteLength;
541
+ }
542
+ //# sourceMappingURL=coordination-discovery-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-discovery-state.js","sourceRoot":"","sources":["../src/coordination-discovery-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type MeshAudienceTopic } from '@agentplat/mesh-protocol';
2
+ import type { MeshCapabilityMatchResult, MeshCapabilityRequirement, MeshDiscoveryAdvanceDecision, MeshDiscoveryDecision, MeshDiscoveryRuntimeState, MeshVerifiedDiscoveryRequest } from './coordination-discovery-contracts.js';
3
+ /**
4
+ * Applies one already-verified discovery record. Signature verification and
5
+ * key resolution remain the responsibility of the next inbound-boundary slice.
6
+ */
7
+ export declare function evaluateVerifiedMeshDiscoveryEnvelope(state: MeshDiscoveryRuntimeState, request: MeshVerifiedDiscoveryRequest): MeshDiscoveryDecision;
8
+ /** Materializes expiry using only caller-supplied logical time. */
9
+ export declare function advanceMeshDiscoveryState(state: MeshDiscoveryRuntimeState, logicalTime: number): MeshDiscoveryAdvanceDecision;
10
+ /** Pure matching over locally visible, admitted and unexpired self-claims. */
11
+ export declare function matchMeshDiscoveryCapabilities(state: MeshDiscoveryRuntimeState, requirement: MeshCapabilityRequirement, logicalTime: number): MeshCapabilityMatchResult;
12
+ /**
13
+ * Resolves bounded topic recipients from the sender's local view only.
14
+ * Topic subscriptions are receiver-local and are enforced at inbound delivery;
15
+ * an existing capability self-claim is never required to receive a first
16
+ * capability advertisement.
17
+ */
18
+ export declare function selectMeshDiscoveryTopicRecipients(state: MeshDiscoveryRuntimeState, topic: MeshAudienceTopic, logicalTime: number, fanout?: number): readonly string[];
19
+ //# sourceMappingURL=coordination-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination-discovery.d.ts","sourceRoot":"","sources":["../src/coordination-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAIV,yBAAyB,EAEzB,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EAIrB,yBAAyB,EAGzB,4BAA4B,EAC7B,MAAM,uCAAuC,CAAC;AAoB/C;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,yBAAyB,EAChC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CA4DvB;AAED,mEAAmE;AACnE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,MAAM,GAClB,4BAA4B,CAwH9B;AAED,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,yBAAyB,EAChC,WAAW,EAAE,yBAAyB,EACtC,WAAW,EAAE,MAAM,GAClB,yBAAyB,CAuC3B;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,MAAM,EACnB,MAAM,SAAuC,GAC5C,SAAS,MAAM,EAAE,CA+BnB"}