@rookdaemon/agora 0.2.8 → 0.2.9
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/chunk-JUOGKXFN.js +1645 -0
- package/dist/chunk-JUOGKXFN.js.map +1 -0
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +1163 -1137
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1613 -30
- package/dist/index.js +1135 -29
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/config.d.ts +0 -59
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -115
- package/dist/config.js.map +0 -1
- package/dist/discovery/bootstrap.d.ts +0 -32
- package/dist/discovery/bootstrap.d.ts.map +0 -1
- package/dist/discovery/bootstrap.js +0 -36
- package/dist/discovery/bootstrap.js.map +0 -1
- package/dist/discovery/peer-discovery.d.ts +0 -59
- package/dist/discovery/peer-discovery.d.ts.map +0 -1
- package/dist/discovery/peer-discovery.js +0 -108
- package/dist/discovery/peer-discovery.js.map +0 -1
- package/dist/identity/keypair.d.ts +0 -42
- package/dist/identity/keypair.d.ts.map +0 -1
- package/dist/identity/keypair.js +0 -83
- package/dist/identity/keypair.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/message/envelope.d.ts +0 -59
- package/dist/message/envelope.d.ts.map +0 -1
- package/dist/message/envelope.js +0 -83
- package/dist/message/envelope.js.map +0 -1
- package/dist/message/types/paper-discovery.d.ts +0 -28
- package/dist/message/types/paper-discovery.d.ts.map +0 -1
- package/dist/message/types/paper-discovery.js +0 -2
- package/dist/message/types/paper-discovery.js.map +0 -1
- package/dist/message/types/peer-discovery.d.ts +0 -78
- package/dist/message/types/peer-discovery.d.ts.map +0 -1
- package/dist/message/types/peer-discovery.js +0 -90
- package/dist/message/types/peer-discovery.js.map +0 -1
- package/dist/peer/client.d.ts +0 -50
- package/dist/peer/client.d.ts.map +0 -1
- package/dist/peer/client.js +0 -138
- package/dist/peer/client.js.map +0 -1
- package/dist/peer/manager.d.ts +0 -65
- package/dist/peer/manager.d.ts.map +0 -1
- package/dist/peer/manager.js +0 -153
- package/dist/peer/manager.js.map +0 -1
- package/dist/peer/server.d.ts +0 -65
- package/dist/peer/server.d.ts.map +0 -1
- package/dist/peer/server.js +0 -154
- package/dist/peer/server.js.map +0 -1
- package/dist/registry/capability.d.ts +0 -44
- package/dist/registry/capability.d.ts.map +0 -1
- package/dist/registry/capability.js +0 -94
- package/dist/registry/capability.js.map +0 -1
- package/dist/registry/discovery-service.d.ts +0 -64
- package/dist/registry/discovery-service.d.ts.map +0 -1
- package/dist/registry/discovery-service.js +0 -129
- package/dist/registry/discovery-service.js.map +0 -1
- package/dist/registry/messages.d.ts +0 -105
- package/dist/registry/messages.d.ts.map +0 -1
- package/dist/registry/messages.js +0 -2
- package/dist/registry/messages.js.map +0 -1
- package/dist/registry/peer-store.d.ts +0 -57
- package/dist/registry/peer-store.d.ts.map +0 -1
- package/dist/registry/peer-store.js +0 -92
- package/dist/registry/peer-store.js.map +0 -1
- package/dist/registry/peer.d.ts +0 -20
- package/dist/registry/peer.d.ts.map +0 -1
- package/dist/registry/peer.js +0 -2
- package/dist/registry/peer.js.map +0 -1
- package/dist/relay/client.d.ts +0 -112
- package/dist/relay/client.d.ts.map +0 -1
- package/dist/relay/client.js +0 -281
- package/dist/relay/client.js.map +0 -1
- package/dist/relay/jwt-auth.d.ts +0 -40
- package/dist/relay/jwt-auth.d.ts.map +0 -1
- package/dist/relay/jwt-auth.js +0 -109
- package/dist/relay/jwt-auth.js.map +0 -1
- package/dist/relay/message-buffer.d.ts +0 -41
- package/dist/relay/message-buffer.d.ts.map +0 -1
- package/dist/relay/message-buffer.js +0 -53
- package/dist/relay/message-buffer.js.map +0 -1
- package/dist/relay/rest-api.d.ts +0 -68
- package/dist/relay/rest-api.d.ts.map +0 -1
- package/dist/relay/rest-api.js +0 -225
- package/dist/relay/rest-api.js.map +0 -1
- package/dist/relay/run-relay.d.ts +0 -33
- package/dist/relay/run-relay.d.ts.map +0 -1
- package/dist/relay/run-relay.js +0 -57
- package/dist/relay/run-relay.js.map +0 -1
- package/dist/relay/server.d.ts +0 -91
- package/dist/relay/server.d.ts.map +0 -1
- package/dist/relay/server.js +0 -385
- package/dist/relay/server.js.map +0 -1
- package/dist/relay/store.d.ts +0 -19
- package/dist/relay/store.d.ts.map +0 -1
- package/dist/relay/store.js +0 -55
- package/dist/relay/store.js.map +0 -1
- package/dist/relay/types.d.ts +0 -35
- package/dist/relay/types.d.ts.map +0 -1
- package/dist/relay/types.js +0 -2
- package/dist/relay/types.js.map +0 -1
- package/dist/reputation/commit-reveal.d.ts +0 -45
- package/dist/reputation/commit-reveal.d.ts.map +0 -1
- package/dist/reputation/commit-reveal.js +0 -125
- package/dist/reputation/commit-reveal.js.map +0 -1
- package/dist/reputation/scoring.d.ts +0 -31
- package/dist/reputation/scoring.d.ts.map +0 -1
- package/dist/reputation/scoring.js +0 -105
- package/dist/reputation/scoring.js.map +0 -1
- package/dist/reputation/store.d.ts +0 -83
- package/dist/reputation/store.d.ts.map +0 -1
- package/dist/reputation/store.js +0 -202
- package/dist/reputation/store.js.map +0 -1
- package/dist/reputation/types.d.ts +0 -150
- package/dist/reputation/types.d.ts.map +0 -1
- package/dist/reputation/types.js +0 -113
- package/dist/reputation/types.js.map +0 -1
- package/dist/reputation/verification.d.ts +0 -28
- package/dist/reputation/verification.d.ts.map +0 -1
- package/dist/reputation/verification.js +0 -91
- package/dist/reputation/verification.js.map +0 -1
- package/dist/service.d.ts +0 -90
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -176
- package/dist/service.js.map +0 -1
- package/dist/transport/http.d.ts +0 -41
- package/dist/transport/http.d.ts.map +0 -1
- package/dist/transport/http.js +0 -103
- package/dist/transport/http.js.map +0 -1
- package/dist/transport/peer-config.d.ts +0 -38
- package/dist/transport/peer-config.d.ts.map +0 -1
- package/dist/transport/peer-config.js +0 -41
- package/dist/transport/peer-config.js.map +0 -1
- package/dist/transport/relay.d.ts +0 -30
- package/dist/transport/relay.d.ts.map +0 -1
- package/dist/transport/relay.js +0 -85
- package/dist/transport/relay.js.map +0 -1
- package/dist/utils.d.ts +0 -40
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -59
- package/dist/utils.js.map +0 -1
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
/**
|
|
3
|
-
* Deterministic JSON serialization for capability hashing.
|
|
4
|
-
* Recursively sorts object keys.
|
|
5
|
-
*/
|
|
6
|
-
function stableStringify(value) {
|
|
7
|
-
if (value === null || value === undefined)
|
|
8
|
-
return JSON.stringify(value);
|
|
9
|
-
if (typeof value !== 'object')
|
|
10
|
-
return JSON.stringify(value);
|
|
11
|
-
if (Array.isArray(value)) {
|
|
12
|
-
return '[' + value.map(stableStringify).join(',') + ']';
|
|
13
|
-
}
|
|
14
|
-
const keys = Object.keys(value).sort();
|
|
15
|
-
const pairs = keys.map(k => JSON.stringify(k) + ':' + stableStringify(value[k]));
|
|
16
|
-
return '{' + pairs.join(',') + '}';
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Compute content-addressed ID for a capability based on name, version, and schemas.
|
|
20
|
-
*/
|
|
21
|
-
function computeCapabilityId(name, version, inputSchema, outputSchema) {
|
|
22
|
-
const data = {
|
|
23
|
-
name,
|
|
24
|
-
version,
|
|
25
|
-
...(inputSchema !== undefined ? { inputSchema } : {}),
|
|
26
|
-
...(outputSchema !== undefined ? { outputSchema } : {}),
|
|
27
|
-
};
|
|
28
|
-
const canonical = stableStringify(data);
|
|
29
|
-
return createHash('sha256').update(canonical).digest('hex');
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Creates a capability with a content-addressed ID.
|
|
33
|
-
*
|
|
34
|
-
* @param name - Human-readable capability name
|
|
35
|
-
* @param version - Semantic version string
|
|
36
|
-
* @param description - Description of what the capability does
|
|
37
|
-
* @param options - Optional input/output schemas and tags
|
|
38
|
-
* @returns A Capability object with computed ID
|
|
39
|
-
*/
|
|
40
|
-
export function createCapability(name, version, description, options = {}) {
|
|
41
|
-
const { inputSchema, outputSchema, tags = [] } = options;
|
|
42
|
-
const id = computeCapabilityId(name, version, inputSchema, outputSchema);
|
|
43
|
-
return {
|
|
44
|
-
id,
|
|
45
|
-
name,
|
|
46
|
-
version,
|
|
47
|
-
description,
|
|
48
|
-
...(inputSchema !== undefined ? { inputSchema } : {}),
|
|
49
|
-
...(outputSchema !== undefined ? { outputSchema } : {}),
|
|
50
|
-
tags,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Validates that a capability has all required fields.
|
|
55
|
-
*
|
|
56
|
-
* @param capability - The capability to validate
|
|
57
|
-
* @returns Object with `valid` boolean and optional `errors` array
|
|
58
|
-
*/
|
|
59
|
-
export function validateCapability(capability) {
|
|
60
|
-
const errors = [];
|
|
61
|
-
if (!capability || typeof capability !== 'object') {
|
|
62
|
-
return { valid: false, errors: ['Capability must be an object'] };
|
|
63
|
-
}
|
|
64
|
-
const cap = capability;
|
|
65
|
-
if (!cap.id || typeof cap.id !== 'string') {
|
|
66
|
-
errors.push('Missing or invalid field: id (must be a string)');
|
|
67
|
-
}
|
|
68
|
-
if (!cap.name || typeof cap.name !== 'string') {
|
|
69
|
-
errors.push('Missing or invalid field: name (must be a string)');
|
|
70
|
-
}
|
|
71
|
-
if (!cap.version || typeof cap.version !== 'string') {
|
|
72
|
-
errors.push('Missing or invalid field: version (must be a string)');
|
|
73
|
-
}
|
|
74
|
-
if (!cap.description || typeof cap.description !== 'string') {
|
|
75
|
-
errors.push('Missing or invalid field: description (must be a string)');
|
|
76
|
-
}
|
|
77
|
-
if (!Array.isArray(cap.tags)) {
|
|
78
|
-
errors.push('Missing or invalid field: tags (must be an array)');
|
|
79
|
-
}
|
|
80
|
-
else if (!cap.tags.every(tag => typeof tag === 'string')) {
|
|
81
|
-
errors.push('Invalid field: tags (all elements must be strings)');
|
|
82
|
-
}
|
|
83
|
-
if (cap.inputSchema !== undefined && (typeof cap.inputSchema !== 'object' || cap.inputSchema === null)) {
|
|
84
|
-
errors.push('Invalid field: inputSchema (must be an object)');
|
|
85
|
-
}
|
|
86
|
-
if (cap.outputSchema !== undefined && (typeof cap.outputSchema !== 'object' || cap.outputSchema === null)) {
|
|
87
|
-
errors.push('Invalid field: outputSchema (must be an object)');
|
|
88
|
-
}
|
|
89
|
-
if (errors.length > 0) {
|
|
90
|
-
return { valid: false, errors };
|
|
91
|
-
}
|
|
92
|
-
return { valid: true };
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=capability.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/registry/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { type Envelope } from '../message/envelope.js';
|
|
2
|
-
import { PeerStore } from './peer-store.js';
|
|
3
|
-
import type { Capability } from './capability.js';
|
|
4
|
-
import type { CapabilityAnnouncePayload, CapabilityQueryPayload, CapabilityResponsePayload } from './messages.js';
|
|
5
|
-
/**
|
|
6
|
-
* DiscoveryService manages capability-based peer discovery.
|
|
7
|
-
* It maintains a local index of peer capabilities and handles
|
|
8
|
-
* capability announce, query, and response messages.
|
|
9
|
-
*/
|
|
10
|
-
export declare class DiscoveryService {
|
|
11
|
-
private peerStore;
|
|
12
|
-
private identity;
|
|
13
|
-
constructor(peerStore: PeerStore, identity: {
|
|
14
|
-
publicKey: string;
|
|
15
|
-
privateKey: string;
|
|
16
|
-
});
|
|
17
|
-
/**
|
|
18
|
-
* Announce own capabilities to the network.
|
|
19
|
-
* Creates a capability_announce envelope that can be broadcast to peers.
|
|
20
|
-
*
|
|
21
|
-
* @param capabilities - List of capabilities this agent offers
|
|
22
|
-
* @param metadata - Optional metadata about this agent
|
|
23
|
-
* @returns A signed capability_announce envelope
|
|
24
|
-
*/
|
|
25
|
-
announce(capabilities: Capability[], metadata?: {
|
|
26
|
-
name?: string;
|
|
27
|
-
version?: string;
|
|
28
|
-
}): Envelope<CapabilityAnnouncePayload>;
|
|
29
|
-
/**
|
|
30
|
-
* Handle an incoming capability_announce message.
|
|
31
|
-
* Updates the peer store with the announced capabilities.
|
|
32
|
-
*
|
|
33
|
-
* @param envelope - The capability_announce envelope to process
|
|
34
|
-
*/
|
|
35
|
-
handleAnnounce(envelope: Envelope<CapabilityAnnouncePayload>): void;
|
|
36
|
-
/**
|
|
37
|
-
* Create a capability query payload.
|
|
38
|
-
*
|
|
39
|
-
* @param queryType - Type of query: 'name', 'tag', or 'schema'
|
|
40
|
-
* @param query - The query value (capability name, tag, or schema)
|
|
41
|
-
* @param filters - Optional filters (limit, minTrustScore)
|
|
42
|
-
* @returns A capability_query payload
|
|
43
|
-
*/
|
|
44
|
-
query(queryType: 'name' | 'tag' | 'schema', query: string | object, filters?: {
|
|
45
|
-
limit?: number;
|
|
46
|
-
minTrustScore?: number;
|
|
47
|
-
}): CapabilityQueryPayload;
|
|
48
|
-
/**
|
|
49
|
-
* Handle an incoming capability_query message.
|
|
50
|
-
* Searches the local peer store and returns matching peers.
|
|
51
|
-
*
|
|
52
|
-
* @param envelope - The capability_query envelope to process
|
|
53
|
-
* @returns A capability_response envelope with matching peers
|
|
54
|
-
*/
|
|
55
|
-
handleQuery(envelope: Envelope<CapabilityQueryPayload>): Envelope<CapabilityResponsePayload>;
|
|
56
|
-
/**
|
|
57
|
-
* Remove peers that haven't been seen within the specified time window.
|
|
58
|
-
*
|
|
59
|
-
* @param maxAgeMs - Maximum age in milliseconds
|
|
60
|
-
* @returns Number of peers removed
|
|
61
|
-
*/
|
|
62
|
-
pruneStale(maxAgeMs: number, currentTime?: number): number;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=discovery-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-service.d.ts","sourceRoot":"","sources":["../../src/registry/discovery-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;gBADR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAG7D;;;;;;;OAOG;IACH,QAAQ,CACN,YAAY,EAAE,UAAU,EAAE,EAC1B,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,QAAQ,CAAC,yBAAyB,CAAC;IAoBtC;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAgBnE;;;;;;;OAOG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,EACpC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,sBAAsB;IAQzB;;;;;;OAMG;IACH,WAAW,CACT,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,QAAQ,CAAC,yBAAyB,CAAC;IAsDtC;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAmB,GAAG,MAAM;CAGvE"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { createEnvelope } from '../message/envelope.js';
|
|
2
|
-
/**
|
|
3
|
-
* DiscoveryService manages capability-based peer discovery.
|
|
4
|
-
* It maintains a local index of peer capabilities and handles
|
|
5
|
-
* capability announce, query, and response messages.
|
|
6
|
-
*/
|
|
7
|
-
export class DiscoveryService {
|
|
8
|
-
peerStore;
|
|
9
|
-
identity;
|
|
10
|
-
constructor(peerStore, identity) {
|
|
11
|
-
this.peerStore = peerStore;
|
|
12
|
-
this.identity = identity;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Announce own capabilities to the network.
|
|
16
|
-
* Creates a capability_announce envelope that can be broadcast to peers.
|
|
17
|
-
*
|
|
18
|
-
* @param capabilities - List of capabilities this agent offers
|
|
19
|
-
* @param metadata - Optional metadata about this agent
|
|
20
|
-
* @returns A signed capability_announce envelope
|
|
21
|
-
*/
|
|
22
|
-
announce(capabilities, metadata) {
|
|
23
|
-
const payload = {
|
|
24
|
-
publicKey: this.identity.publicKey,
|
|
25
|
-
capabilities,
|
|
26
|
-
metadata: metadata ? {
|
|
27
|
-
...metadata,
|
|
28
|
-
lastSeen: Date.now(),
|
|
29
|
-
} : {
|
|
30
|
-
lastSeen: Date.now(),
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
return createEnvelope('capability_announce', this.identity.publicKey, this.identity.privateKey, payload);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Handle an incoming capability_announce message.
|
|
37
|
-
* Updates the peer store with the announced capabilities.
|
|
38
|
-
*
|
|
39
|
-
* @param envelope - The capability_announce envelope to process
|
|
40
|
-
*/
|
|
41
|
-
handleAnnounce(envelope) {
|
|
42
|
-
const { payload } = envelope;
|
|
43
|
-
const peer = {
|
|
44
|
-
publicKey: payload.publicKey,
|
|
45
|
-
capabilities: payload.capabilities,
|
|
46
|
-
lastSeen: payload.metadata?.lastSeen || envelope.timestamp,
|
|
47
|
-
metadata: payload.metadata ? {
|
|
48
|
-
name: payload.metadata.name,
|
|
49
|
-
version: payload.metadata.version,
|
|
50
|
-
} : undefined,
|
|
51
|
-
};
|
|
52
|
-
this.peerStore.addOrUpdatePeer(peer);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Create a capability query payload.
|
|
56
|
-
*
|
|
57
|
-
* @param queryType - Type of query: 'name', 'tag', or 'schema'
|
|
58
|
-
* @param query - The query value (capability name, tag, or schema)
|
|
59
|
-
* @param filters - Optional filters (limit, minTrustScore)
|
|
60
|
-
* @returns A capability_query payload
|
|
61
|
-
*/
|
|
62
|
-
query(queryType, query, filters) {
|
|
63
|
-
return {
|
|
64
|
-
queryType,
|
|
65
|
-
query,
|
|
66
|
-
filters,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Handle an incoming capability_query message.
|
|
71
|
-
* Searches the local peer store and returns matching peers.
|
|
72
|
-
*
|
|
73
|
-
* @param envelope - The capability_query envelope to process
|
|
74
|
-
* @returns A capability_response envelope with matching peers
|
|
75
|
-
*/
|
|
76
|
-
handleQuery(envelope) {
|
|
77
|
-
const { payload } = envelope;
|
|
78
|
-
let peers = [];
|
|
79
|
-
// Execute query based on type
|
|
80
|
-
if (payload.queryType === 'name' && typeof payload.query === 'string') {
|
|
81
|
-
peers = this.peerStore.findByCapability(payload.query);
|
|
82
|
-
}
|
|
83
|
-
else if (payload.queryType === 'tag' && typeof payload.query === 'string') {
|
|
84
|
-
peers = this.peerStore.findByTag(payload.query);
|
|
85
|
-
}
|
|
86
|
-
else if (payload.queryType === 'schema') {
|
|
87
|
-
// Schema-based matching is deferred to Phase 2b
|
|
88
|
-
// For now, return empty results
|
|
89
|
-
peers = [];
|
|
90
|
-
}
|
|
91
|
-
// Apply filters
|
|
92
|
-
const limit = payload.filters?.limit;
|
|
93
|
-
const totalMatches = peers.length;
|
|
94
|
-
if (limit !== undefined && limit > 0) {
|
|
95
|
-
peers = peers.slice(0, limit);
|
|
96
|
-
}
|
|
97
|
-
// Transform peers to response format
|
|
98
|
-
const responsePeers = peers.map(peer => ({
|
|
99
|
-
publicKey: peer.publicKey,
|
|
100
|
-
capabilities: peer.capabilities,
|
|
101
|
-
metadata: peer.metadata ? {
|
|
102
|
-
name: peer.metadata.name,
|
|
103
|
-
version: peer.metadata.version,
|
|
104
|
-
lastSeen: peer.lastSeen,
|
|
105
|
-
} : {
|
|
106
|
-
lastSeen: peer.lastSeen,
|
|
107
|
-
},
|
|
108
|
-
// Trust score integration deferred to Phase 2b (RFC-001)
|
|
109
|
-
trustScore: undefined,
|
|
110
|
-
}));
|
|
111
|
-
const responsePayload = {
|
|
112
|
-
queryId: envelope.id,
|
|
113
|
-
peers: responsePeers,
|
|
114
|
-
totalMatches,
|
|
115
|
-
};
|
|
116
|
-
return createEnvelope('capability_response', this.identity.publicKey, this.identity.privateKey, responsePayload, Date.now(), envelope.id // inReplyTo
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Remove peers that haven't been seen within the specified time window.
|
|
121
|
-
*
|
|
122
|
-
* @param maxAgeMs - Maximum age in milliseconds
|
|
123
|
-
* @returns Number of peers removed
|
|
124
|
-
*/
|
|
125
|
-
pruneStale(maxAgeMs, currentTime = Date.now()) {
|
|
126
|
-
return this.peerStore.prune(maxAgeMs, currentTime);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=discovery-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-service.js","sourceRoot":"","sources":["../../src/registry/discovery-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import type { Capability } from './capability.js';
|
|
2
|
-
/**
|
|
3
|
-
* Payload for 'announce' messages.
|
|
4
|
-
* An agent publishes its capabilities and metadata to the network.
|
|
5
|
-
*/
|
|
6
|
-
export interface AnnouncePayload {
|
|
7
|
-
/** Capabilities this agent offers */
|
|
8
|
-
capabilities: Capability[];
|
|
9
|
-
/** Optional metadata about the agent */
|
|
10
|
-
metadata?: {
|
|
11
|
-
/** Human-readable agent name */
|
|
12
|
-
name?: string;
|
|
13
|
-
/** Agent software version */
|
|
14
|
-
version?: string;
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Payload for 'discover' messages.
|
|
19
|
-
* An agent queries the network to find peers with specific capabilities.
|
|
20
|
-
*/
|
|
21
|
-
export interface DiscoverPayload {
|
|
22
|
-
/** Query parameters for discovery */
|
|
23
|
-
query: {
|
|
24
|
-
/** Filter by capability name */
|
|
25
|
-
capabilityName?: string;
|
|
26
|
-
/** Filter by capability tag */
|
|
27
|
-
tag?: string;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Payload for responses to 'discover' messages.
|
|
32
|
-
* Returns a list of peers matching the discovery query.
|
|
33
|
-
*/
|
|
34
|
-
export interface DiscoverResponsePayload {
|
|
35
|
-
/** Peers matching the discovery query */
|
|
36
|
-
peers: Array<{
|
|
37
|
-
/** Public key of the peer */
|
|
38
|
-
publicKey: string;
|
|
39
|
-
/** Capabilities the peer offers */
|
|
40
|
-
capabilities: Capability[];
|
|
41
|
-
/** Optional metadata about the peer */
|
|
42
|
-
metadata?: {
|
|
43
|
-
/** Human-readable peer name */
|
|
44
|
-
name?: string;
|
|
45
|
-
/** Peer software version */
|
|
46
|
-
version?: string;
|
|
47
|
-
};
|
|
48
|
-
}>;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Payload for 'capability_announce' messages.
|
|
52
|
-
* An agent publishes its capabilities to the network.
|
|
53
|
-
*/
|
|
54
|
-
export interface CapabilityAnnouncePayload {
|
|
55
|
-
/** Agent's Ed25519 public key */
|
|
56
|
-
publicKey: string;
|
|
57
|
-
/** List of capabilities offered */
|
|
58
|
-
capabilities: Capability[];
|
|
59
|
-
/** Optional metadata */
|
|
60
|
-
metadata?: {
|
|
61
|
-
name?: string;
|
|
62
|
-
version?: string;
|
|
63
|
-
lastSeen?: number;
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Payload for 'capability_query' messages.
|
|
68
|
-
* An agent queries the network for peers with specific capabilities.
|
|
69
|
-
*/
|
|
70
|
-
export interface CapabilityQueryPayload {
|
|
71
|
-
/** Query type: by name, tag, or schema */
|
|
72
|
-
queryType: 'name' | 'tag' | 'schema';
|
|
73
|
-
/** Query value (capability name, tag, or JSON schema) */
|
|
74
|
-
query: string | object;
|
|
75
|
-
/** Optional filters */
|
|
76
|
-
filters?: {
|
|
77
|
-
/** Minimum trust score (RFC-001 integration) */
|
|
78
|
-
minTrustScore?: number;
|
|
79
|
-
/** Maximum results to return */
|
|
80
|
-
limit?: number;
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Payload for 'capability_response' messages.
|
|
85
|
-
* Response to a capability_query with matching peers.
|
|
86
|
-
*/
|
|
87
|
-
export interface CapabilityResponsePayload {
|
|
88
|
-
/** Query ID this is responding to */
|
|
89
|
-
queryId: string;
|
|
90
|
-
/** Matching peers */
|
|
91
|
-
peers: Array<{
|
|
92
|
-
publicKey: string;
|
|
93
|
-
capabilities: Capability[];
|
|
94
|
-
metadata?: {
|
|
95
|
-
name?: string;
|
|
96
|
-
version?: string;
|
|
97
|
-
lastSeen?: number;
|
|
98
|
-
};
|
|
99
|
-
/** Trust score from RFC-001 (Phase 2b) */
|
|
100
|
-
trustScore?: number;
|
|
101
|
-
}>;
|
|
102
|
-
/** Total matching peers (may be > peers.length if limited) */
|
|
103
|
-
totalMatches: number;
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/registry/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,EAAE;QACT,gCAAgC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,KAAK,EAAE;QACL,gCAAgC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,+BAA+B;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,KAAK,EAAE,KAAK,CAAC;QACX,6BAA6B;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,mCAAmC;QACnC,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,uCAAuC;QACvC,QAAQ,CAAC,EAAE;YACT,+BAA+B;YAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,4BAA4B;YAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrC,yDAAyD;IACzD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,uBAAuB;IACvB,OAAO,CAAC,EAAE;QACR,gDAAgD;QAChD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gCAAgC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,0CAA0C;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/registry/messages.ts"],"names":[],"mappings":""}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { Peer } from './peer.js';
|
|
2
|
-
/**
|
|
3
|
-
* In-memory store for known peers on the network
|
|
4
|
-
*/
|
|
5
|
-
export declare class PeerStore {
|
|
6
|
-
private peers;
|
|
7
|
-
/**
|
|
8
|
-
* Add or update a peer in the store.
|
|
9
|
-
* If a peer with the same publicKey exists, it will be updated.
|
|
10
|
-
*
|
|
11
|
-
* @param peer - The peer to add or update
|
|
12
|
-
*/
|
|
13
|
-
addOrUpdatePeer(peer: Peer): void;
|
|
14
|
-
/**
|
|
15
|
-
* Remove a peer from the store.
|
|
16
|
-
*
|
|
17
|
-
* @param publicKey - The public key of the peer to remove
|
|
18
|
-
* @returns true if the peer was removed, false if it didn't exist
|
|
19
|
-
*/
|
|
20
|
-
removePeer(publicKey: string): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Get a peer by their public key.
|
|
23
|
-
*
|
|
24
|
-
* @param publicKey - The public key of the peer to retrieve
|
|
25
|
-
* @returns The peer if found, undefined otherwise
|
|
26
|
-
*/
|
|
27
|
-
getPeer(publicKey: string): Peer | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Find all peers that offer a specific capability by name.
|
|
30
|
-
*
|
|
31
|
-
* @param name - The capability name to search for
|
|
32
|
-
* @returns Array of peers that have a capability with the given name
|
|
33
|
-
*/
|
|
34
|
-
findByCapability(name: string): Peer[];
|
|
35
|
-
/**
|
|
36
|
-
* Find all peers that have capabilities with a specific tag.
|
|
37
|
-
*
|
|
38
|
-
* @param tag - The tag to search for
|
|
39
|
-
* @returns Array of peers that have at least one capability with the given tag
|
|
40
|
-
*/
|
|
41
|
-
findByTag(tag: string): Peer[];
|
|
42
|
-
/**
|
|
43
|
-
* Get all peers in the store.
|
|
44
|
-
*
|
|
45
|
-
* @returns Array of all peers
|
|
46
|
-
*/
|
|
47
|
-
allPeers(): Peer[];
|
|
48
|
-
/**
|
|
49
|
-
* Remove peers that haven't been seen within the specified time window.
|
|
50
|
-
*
|
|
51
|
-
* @param maxAgeMs - Maximum age in milliseconds. Peers older than this will be removed.
|
|
52
|
-
* @param currentTime - Current timestamp (ms), defaults to Date.now()
|
|
53
|
-
* @returns Number of peers removed
|
|
54
|
-
*/
|
|
55
|
-
prune(maxAgeMs: number, currentTime?: number): number;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=peer-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peer-store.d.ts","sourceRoot":"","sources":["../../src/registry/peer-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIjC;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI5C;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE;IAatC;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE;IAa9B;;;;OAIG;IACH,QAAQ,IAAI,IAAI,EAAE;IAIlB;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAmB,GAAG,MAAM;CAalE"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* In-memory store for known peers on the network
|
|
3
|
-
*/
|
|
4
|
-
export class PeerStore {
|
|
5
|
-
peers = new Map();
|
|
6
|
-
/**
|
|
7
|
-
* Add or update a peer in the store.
|
|
8
|
-
* If a peer with the same publicKey exists, it will be updated.
|
|
9
|
-
*
|
|
10
|
-
* @param peer - The peer to add or update
|
|
11
|
-
*/
|
|
12
|
-
addOrUpdatePeer(peer) {
|
|
13
|
-
this.peers.set(peer.publicKey, peer);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Remove a peer from the store.
|
|
17
|
-
*
|
|
18
|
-
* @param publicKey - The public key of the peer to remove
|
|
19
|
-
* @returns true if the peer was removed, false if it didn't exist
|
|
20
|
-
*/
|
|
21
|
-
removePeer(publicKey) {
|
|
22
|
-
return this.peers.delete(publicKey);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get a peer by their public key.
|
|
26
|
-
*
|
|
27
|
-
* @param publicKey - The public key of the peer to retrieve
|
|
28
|
-
* @returns The peer if found, undefined otherwise
|
|
29
|
-
*/
|
|
30
|
-
getPeer(publicKey) {
|
|
31
|
-
return this.peers.get(publicKey);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Find all peers that offer a specific capability by name.
|
|
35
|
-
*
|
|
36
|
-
* @param name - The capability name to search for
|
|
37
|
-
* @returns Array of peers that have a capability with the given name
|
|
38
|
-
*/
|
|
39
|
-
findByCapability(name) {
|
|
40
|
-
const result = [];
|
|
41
|
-
for (const peer of this.peers.values()) {
|
|
42
|
-
const hasCapability = peer.capabilities.some(cap => cap.name === name);
|
|
43
|
-
if (hasCapability) {
|
|
44
|
-
result.push(peer);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return result;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Find all peers that have capabilities with a specific tag.
|
|
51
|
-
*
|
|
52
|
-
* @param tag - The tag to search for
|
|
53
|
-
* @returns Array of peers that have at least one capability with the given tag
|
|
54
|
-
*/
|
|
55
|
-
findByTag(tag) {
|
|
56
|
-
const result = [];
|
|
57
|
-
for (const peer of this.peers.values()) {
|
|
58
|
-
const hasTag = peer.capabilities.some(cap => cap.tags.includes(tag));
|
|
59
|
-
if (hasTag) {
|
|
60
|
-
result.push(peer);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get all peers in the store.
|
|
67
|
-
*
|
|
68
|
-
* @returns Array of all peers
|
|
69
|
-
*/
|
|
70
|
-
allPeers() {
|
|
71
|
-
return Array.from(this.peers.values());
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Remove peers that haven't been seen within the specified time window.
|
|
75
|
-
*
|
|
76
|
-
* @param maxAgeMs - Maximum age in milliseconds. Peers older than this will be removed.
|
|
77
|
-
* @param currentTime - Current timestamp (ms), defaults to Date.now()
|
|
78
|
-
* @returns Number of peers removed
|
|
79
|
-
*/
|
|
80
|
-
prune(maxAgeMs, currentTime = Date.now()) {
|
|
81
|
-
const cutoff = currentTime - maxAgeMs;
|
|
82
|
-
let removed = 0;
|
|
83
|
-
for (const [publicKey, peer] of this.peers.entries()) {
|
|
84
|
-
if (peer.lastSeen < cutoff) {
|
|
85
|
-
this.peers.delete(publicKey);
|
|
86
|
-
removed++;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return removed;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=peer-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peer-store.js","sourceRoot":"","sources":["../../src/registry/peer-store.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,IAAU;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACvE,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,GAAW;QACnB,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACrE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAgB,EAAE,cAAsB,IAAI,CAAC,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
package/dist/registry/peer.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Capability } from './capability.js';
|
|
2
|
-
/**
|
|
3
|
-
* A peer is an agent on the network
|
|
4
|
-
*/
|
|
5
|
-
export interface Peer {
|
|
6
|
-
/** Identity (hex-encoded ed25519 public key) */
|
|
7
|
-
publicKey: string;
|
|
8
|
-
/** Capabilities this peer offers */
|
|
9
|
-
capabilities: Capability[];
|
|
10
|
-
/** Unix timestamp (ms) when this peer was last seen */
|
|
11
|
-
lastSeen: number;
|
|
12
|
-
/** Optional metadata about the peer */
|
|
13
|
-
metadata?: {
|
|
14
|
-
/** Human-readable alias */
|
|
15
|
-
name?: string;
|
|
16
|
-
/** Agent software version */
|
|
17
|
-
version?: string;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=peer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/registry/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE;QACT,2BAA2B;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
package/dist/registry/peer.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/registry/peer.ts"],"names":[],"mappings":""}
|